[戻る]
記事閲覧
投稿キー (右画像の数字を入力) 投稿キー
おなまえ
Eメール
タイトル
コメント
参照先
暗証キー (英数字で8文字以内)
文字色
2つのprepdファイルを読んで1つのPDFで出力したい 投稿者:K 投稿日:2022/11/05(Sat) 15:15 No.2813

要件
・請求書のPDF生成
・全ページを一つのPDFファイルで出力したい

前提
・請求書の「1ページ目」と「2ページ目以降」でレイアウトが異なり、prepdファイルも2つに分けて作られている

以下のようなソースコードで要件を満たせるかと思ったのですが、
ChangeDefFile()を読んでいるところで「印刷データがセットされていません。」というエラーが出て動作しませんでした。
どのように書けば要件を満たせるでしょうか?

paoRep = ReportCreator.GetPDF()

paoRep.LoadDefFile("D:\test1.prepd")
paoRep.PageStart()
paoRep.PageEnd()

paoRep.ChangeDefFile("D:\test2.prepd")
paoRep.PageStart()
paoRep.PageEnd()

paoRep.SavePDF("D:\test.pdf")

Re: 2つのprepdファイルを読んで1つのPDFで出力したい 投稿者:Pao@Office 投稿日:2022/11/10(Thu) 17:42 No.2814

お問い合わせありがとうございます。
ChangeDefFile を使用しないといけないでしょうか?

もし、LoadDefFile のみであれば、
インストーラに付属るしているサンプルの「2.郵便番号 (PDF・SVZ出力・QRコード)」の通りコーディングしていただければ、
問題なく違うレイアウトの帳票スタイルを読み込み、
1つのPDFファイルに出力できます。

念のためそのサンプルのロジックを抜粋して書いておきます。

DataTable table = ds.Tables["PostTable"];
IReport paoRep = null;

//PDF出力オブジェクトのインスタンスを獲得
paoRep = ReportCreator.GetPdf();


int page = 0;
int line = 999;
string hDate = System.DateTime.Now.ToString();

paoRep.LoadDefFile(appPath + "..\\..\\..\\PaoRep1.prepd");
foreach (DataRow row in table.Rows){
line++;
if (line > 32){ // Head Print
if ( page != 0 ) paoRep.PageEnd();

page++;

if(page == 6)
{
paoRep.LoadDefFile(appPath + "..\\..\\..\\PaoRep2.prepd");
}

paoRep.PageStart();

paoRep.Write("日時", hDate);
paoRep.Write("ページ", "Page-" + page.ToString());

line = 1;

}

//Body Print
paoRep.Write("郵便番号", row["郵便番号"].ToString(), line);
paoRep.Write("市区町村", row["市区町村"].ToString(), line);
paoRep.Write("住所", row["住所"].ToString(), line);
paoRep.Write("横罫線", line);

}
paoRep.PageEnd();

//ファイルの保存ダイアログの処理
saveFileDialog.FileName = "郵便番号帳票";
saveFileDialog.Filter = "PDF形式 (*.pdf)|*.pdf";

if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
//PDF出力
paoRep.SavePDF(saveFileDialog.FileName);
if(MessageBox.Show(this,"PDFを表示しますか?", "PDF の表示", MessageBoxButtons.YesNo ) == DialogResult.Yes)
{
System.Diagnostics.Process.Start(saveFileDialog.FileName);
}
}

- YY-BOARD -