我使用iTextSharp
和C#。
上下文: 我下载PDF并将它们合并为一个巨大的。
问题: 在每一页上,前几个厘米只是白色,而pdf I Import在白色块之后开始。
每页的结尾都是正确的。没有重叠或丢失的对象/文本 - 您可以假设它因为它必须处理更少的空间。我认为它可能会被垂直拉伸。
因此导入工作正常,但它总是在每页的顶部添加几个白色的白色。 这感觉就像一个利润空间。但我似乎无法解决它。
有什么想法吗?
感谢您的帮助。非常感谢。
public void method()
{
// needed variables for the pdf-merging part
fs = new FileStream(Variables.destinationFile, FileMode.Create);
writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
doc.SetPageSize(PageSize.A4);
doc.SetMargins(0f, 0f, 0f, 0f);
pdfContent = writer.DirectContent;
byte[] result;
int numPages;
foreach (Tuple<string, string, int> currentTuple in someArray)
try
{
result = client.DownloadData(new Uri(adress + currentTuple.Item1 + ".pdf"));
// read and add the pages to the output file
reader = new PdfReader(result);
numPages = reader.NumberOfPages;
for (int i = 1; i < numPages + 1; i++)
{
doc.NewPage();
page = writer.GetImportedPage(reader, i);
pdfContent.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
catch (Exception e)
{
}
}
doc.Close();
writer.Close();
fs.Close();
}
P.S。为什么它总是删除我的“你好”? :)
答案 0 :(得分:0)
您使用错误的方法合并文档。您的方法抛弃了所有交互性,并且不尊重页面大小(这解释了您报告的问题)。请告诉我你在哪里获得了以这种方式合并文档的灵感,这样我就可以去打击那个负责你所用例子的人; - )
在chapter 6 of my book中解释了连接文档的正确方法。
您可以在此处找到更多示例:
正如您所看到的,您的问题之前已经在StackOverflow上得到了多次回答,因为许多人一直在使用正确的方法合并文档(使用PdfCopy
)而不是以错误的方式执行(使用PdfWriter
和AddTemplate()
)。
在评论中,您说AddPage()
中的方法PdfCopy
并不存在。我们来看看该课程的最新版本:PdfCopy.cs
我清楚地看到:
/**
* Add an imported page to our output
* @param iPage an imported page
* @throws IOException, BadPdfFormatException
*/
public virtual void AddPage(PdfImportedPage iPage) {
请注意,最新版本还有AddDocument()
方法:
virtual public void AddDocument(PdfReader reader) {
使用此方法,您不再需要遍历所有页面,但您可以一次添加PdfReader
正在阅读的PDF的所有页面。
如果您只想添加一系列页面,可以使用:
virtual public void AddDocument(PdfReader reader, List<int> pagesToKeep) {
请不要使用非官方版本!正式版可在此处下载:http://sourceforge.net/projects/itextsharp/files/itextsharp/
iText Group对旧版本的iTextSharp不承担任何责任,也不对我们软件的分支负责。