1 週間前に iTextSharp を使い始めたばかりです。
PDFWriter を使用して動的コンテンツを追加する前に、PDF レポート構造 (行、画像、静的テキスト) を作成したいと考えています。このレポート テンプレートは、3 種類のレポートに使用されます。
つまり、ページを作成したら、1 ページに戻って新しいコンテンツを追加し、2 ページに移動してさらにコンテンツを追加し、3 ページに移動します。事前に必要なページ数を決定してテンプレートを作成し、コンテンツを追加します。
ページの作成に問題はありません。GotoLocalPage を使用してページ 1 (または呼び出したいページ) に戻るのに問題はありません。しかし、追加したい新しい直接コンテンツはすべて最終ページに表示されます。
カーソルまたは挿入ポイント (知識不足のため) を前のページに移動し、新しいコンテンツの追加を開始するにはどうすればよいですか?
アウトライン、ブックマーク、アンカーを試しましたが、それらはすべてページにテキストを追加しているように見えます - 目に見えないアンカーのようなものですか (つまり、空の文字列を使用していますか?)
ドキュメントを閉じて再度開いてコンテンツを追加したくありません。ドキュメントの特定の部分に移動してコンテンツを追加する方法が必要です。
参照としていくつかのコードを追加しました - コードは VB.net ですが、Java または C# の解釈に問題はありません - 申し訳ありませんが、画像を追加できませんでした。
Private Sub BuildPDFDocument(ByVal DocType As String, ByVal OutFileName As String, ByVal Pages As Integer)
OutFile = New Document(PageSize.LETTER, 0, 0, 0, 0)
OutFile.SetPageSize(PageSize.LETTER.Rotate())
Try
Using Writer = PdfWriter.GetInstance(OutFile, New FileStream(WorkingOutputFolder & OutFileName, FileMode.Create))
OutFile.Open()
'-------------------------------------------------------------------------------------------------------------------
ContentByte = Writer.DirectContent
For i = 1 To Pages
If i > 1 Then OutFile.NewPage()
AddTemplateImages()
AddTemplateLines()
AddTemplateText(DocType, i, Pages)
AddColumnText()
AddBarcodeEAN()
AddBarcode39()
AddBarcodeQR()
'THIS WORKS BUT I DO NOT WANT TO ADD DYNAMIC CONTENT HERE
'I WANT TO BUILD TEMPLATE FIRST AND THEN GO BACK TO PAGE ONE AND ADD MORE CONTENT
'AddDynamicContent(i)
Next
'-------------------------------------------------------------------------------------------------------------------
Dim Action As PdfAction
For i = 1 To Pages
'Action = PdfAction.GotoLocalPage(i, New PdfDestination(PdfDestination.FIT), Writer)
Action = PdfAction.GotoLocalPage(i, New PdfDestination(PdfDestination.XYZ, -1, 10000, 0), Writer)
Writer.SetOpenAction(Action)
'HERE IS THE PROBLEM - I WANT TO GO TO A SPECIFIC PAGE THEN ADD SOME CONTENT
'WHEN DONE MOVE TO THE NEXT PAGE ADD SOME MORE CONTENT AND SO AND SO FORTH
'BUT ALL THE CONTENT ENDS UP ON THE LAST PAGE REGARDLESS OF ME MOVING FROM PAGE TO PAGE
'HOW DO I MOVE THE CURSOR or INSERTION POINT TO A LOCAL PAGE I HAVE CALLED
'AND ADD NEW Chunks/Phrases/Paragraphs TO THAT PAGE
AddDynamicContent(i)
Next
'GO BACK TO PAGE 1
Action = PdfAction.GotoLocalPage(1, New PdfDestination(PdfDestination.FIT), Writer)
Writer.SetOpenAction(Action)
'-------------------------------------------------------------------------------------------------------------------
OutFile.Close()
End Using
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub AddDynamicContent(ByVal PageNumber As Integer)
'JUST TESTING RIGHT NOW
ContentByte.BeginText()
'------------------------------------------------------------------------------
ContentByte.SetFontAndSize(FontByName("TimesNewRoman"), 8)
ContentByte.SetTextMatrix(58.0F, 333.0F)
ContentByte.ShowText("DYNAMIC CONTENT ON PAGE " & PageNumber.ToString)
'------------------------------------------------------------------------------
ContentByte.EndText()
End Sub