【发布时间】:2018-05-14 19:55:55
【问题描述】:
我正在解决一个需要创建一个 PDF 表单的问题。
该 PDF 表单有 8 个部分,我需要在其中放置信息,并且看起来像图片所示(仅显示 4 个)。
关键是我的查询将返回 0 - n 个不同的结果。所以我需要除以 8 并在不同的页面上发布。
我尝试如下所示,但这似乎不起作用,因为我总是加载新文档。有人对如何制作有一些建议吗?
Try
Dim sCommand As OleDb.OleDbCommand
sCommand = New OleDb.OleDbCommand("SELECT a,b,c Query to fetch n results ", _dbCon)
sCommand.CommandTimeout = 0
Dim _dbREADER As OleDb.OleDbDataReader
_dbREADER = sCommand.ExecuteReader
Dim dt As DataTable = New DataTable()
dt.Load(_dbREADER)
Dim totalPages As Integer = dt.Rows.Count / 8
Dim currentPage As Integer = 1
Dim rowCounter As Long = 0
If dt.Rows.Count > 0 Then
For Each row In dt.Rows
rowCounter += 1
If rowCounter = 8 Then
currentPage += 1
rowCounter = 0
End If
_pdfDocumentOutput = System.IO.Path.GetTempPath() & "MailingForm_" & currentPage & ".pdf"
SaveFromResources(_pdfDocument, My.Resources.template)
Using reader As New PdfReader(_pdfDocument)
Using stamper As New PdfStamper(reader, New IO.FileStream(_pdfDocumentOutput, IO.FileMode.Create))
Dim fontName As String = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "SCRIPTIN.ttf")
Dim bf As BaseFont = BaseFont.CreateFont(fontName, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED)
Dim pdfForm As AcroFields = stamper.AcroFields
pdfForm.AddSubstitutionFont(bf)
pdfForm.SetField(rowCounter - 1 & "0", row("Customer")) 'Checks the top radiobutton of the VrPr4 field
pdfForm.SetField(rowCounter - 1 & "1", row("Address"))
pdfForm.SetField(rowCounter - 1 & "2", row("Location"))
stamper.FormFlattening = True
End Using
End Using
Next
End If
Status.Text = "Store info loaded ! "
Catch ex As Exception
Status.Text = ex.Message
End Try
【问题讨论】:
-
您的问题包含矛盾。 [1] 你说 我需要创建一个 PDF 表单。 我假设你想从头开始创建一个满足某些要求的交互式 PDF。 [2] 该表单已存在于您的代码中。该文档的路径存储在
_pdfDocument变量中。到那时,满足期望的要求已经太晚了。要么满足,要么不满足。鉴于您发布问题这一事实,可以假设未满足要求。 [2] 与 [1] 相矛盾,因此无法对您的问题发表评论,更不用说回答了。 -
好吧对不起我的错误解释。关键是我知道我必须得到输出 n 个文件?但它们都基于一个 _pdfDocument,其中包含不同的数据。由于我没有能力重新创建文件并将所有页面放入一个文件中,所以我不得不像我展示的那样使用它。我的回答者是一个解决了我的问题的答案。但由于它不被接受,我仍在寻找更简单的制作方法。至少 LINQ 来拆分数据表而不是那些 for 循环
-
没有人,但您可以接受自己的问题,因此我不明白您为什么说“因为它不被接受”。如果您需要 n 个文件作为输出(评论的第一部分),您需要创建一个
PdfReader和一个PdfStampern 次。那有什么问题?在评论的第二部分,您似乎想将所有页面放入一个文件中。这很令人困惑。完全不清楚您想要 n 个文档还是单个文档。 -
我想将所有页面放在一个文件中。但这有可能吗?现在我也接受 n 个文件?关于我的问题,我认为我把它复杂化了,它不应该在 stackoverflow 上
-
当然可以将所有页面放在一个文件中。你的问题听上去并不复杂,但你的问题太复杂了,以至于没人能回答。
标签: vb.net pdf itext pdf-generation oledb