坚持使用PDFBox Android,PDFBox Android:1.8.9.0
我加载pdf文件的第一页,在其中写入文本,并将此页面导入最终文档的新页面。
问题是,当创建新页面时,它会使用包含以前文本的最后一页
所以,第一页是可以的,但是下一页有重叠的文本。。
private File writeReport() {
File fileSource = new File(getActivity().getApplicationContext().getExternalCacheDir(), "fileSource.pdf");
// get file model in assets
InputStream inputAsset = null;
try {
inputAsset = getActivity().getApplicationContext().getResources().getAssets().open("file_model.pdf");
} catch (IOException e) {
e.printStackTrace();
}
// copy file model in fileSource
try {
OutputStream outputStream = new FileOutputStream(file);
byte buffer[] = new byte[1024];
int length = 0;
while ((length = inputAsset.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
outputStream.close();
inputAsset.close();
} catch (IOException e) {
System.out.print("Copy assets : IOException" + e.getMessage());
}
File fileTarget = new File(getActivity().getApplicationContext().getCacheDir(), "fileTarget.pdf");
try {
PDFBoxResourceLoader.init(getActivity().getApplicationContext()); // init lib
PDDocument documentSource = PDDocument.load(fileSource);
PDDocument documentTarget = new PDDocument();
// iteration == a new page
for(int i=0 ; i < 3 ; i++)
{
PDPage page = documentSource.getDocumentCatalog().getPages().get(0);
PDPageContentStream contentStream = new PDPageContentStream(documentSource, page, true, true);
PDFont font1 = PDType1Font.HELVETICA;
float startY = page.getMediaBox().getUpperRightY();
float factor = 2.83f;
page.getStream();
// add text
contentStream.beginText();
contentStream.setFont(font1, 10);
contentStream.newLineAtOffset(factor * 60, startY - (factor * 53));
contentStream.showText("test text" + i);
contentStream.endText();
contentStream.close();
// import source page to output file-> Problem here ! new page contain old overlay text...
documentTarget.importPage(page);
}
documentTarget.save(fileTarget);
documentTarget.close();
documentSource.close();
} catch (IOException e) {
e.printStackTrace();
}
return fileTarget;
}
有没有办法在每次迭代中都有新的页面?谢谢
问题是您重用了同一个PDPage对象,这导致它包含上一次迭代的文本。解决方案:使用
documentTarget.importPage(page)
和那个一起工作。因为这是一个新的PDPage对象,所有内容都已克隆。所以你的新代码如下:
// iteration == a new page
for(int i=0 ; i < 3 ; i++)
{
PDPage page = documentSource.getDocumentCatalog().getPages().get(0);
page = documentTarget.importPage(page); // this is now a new PDPage object
PDPageContentStream contentStream = new PDPageContentStream(documentSource, page, true, true);
PDFont font1 = PDType1Font.HELVETICA;
float startY = page.getMediaBox().getUpperRightY();
float factor = 2.83f;
page.getStream();
// add text
contentStream.beginText();
contentStream.setFont(font1, 10);
contentStream.newLineAtOffset(factor * 60, startY - (factor * 53));
contentStream.showText("test text" + i);
contentStream.endText();
contentStream.close();
}
主要内容:将页面添加到PDF文档,示例在前一章中,我们已经学习了如何创建PDF文档。 创建PDF文档后,我们需要添加页面。 现在来了解如何在PDF文档中添加页面。 将页面添加到PDF文档 可以通过实例化类并使用类的方法将其添加到PDF文档来创建空白页面。 以下是创建一个空文档并向其中添加页面的步骤。 第1步:创建空白文档 通过实例化类创建一个空的PDF文档,如下所示。 第2步:创建一个空白页面 类表示PDF文档中的一个页面,因此可以通
主要内容:将文本添加到现有的PDF文档,示例在前一章中,我们讨论了如何将页面添加到PDF文档。 在本章中,我们将讨论如何将文本添加到现有的PDF文档。 将文本添加到现有的PDF文档 可以使用PDFBox库将内容添加到文档,它提供一个名称为的类,其中包含在的页面中插入文本,图像和其他类型内容所需的方法。 以下是创建空白文档并将内容添加到其中的页面的步骤。 第1步:加载现有文档 使用类的方法加载现有文档。 因此,请实例化此类并加载所需的文档,如
主要内容:示例在前一章中提供的示例中,学习了如何在PDF中向页面添加文本,但通过此程序,只能添加适合单行的文本。 如果您尝试添加更多内容,则不会显示超出行间距的所有文字。 例如,如果传递以下字符串在上一章中执行上述程序,则只会显示其中的一部分。 用上面提到的字符串替换上一章中例子的字符串文本并执行它。 执行后,将得到类似以下输出。 如果仔细观察输出,可以看到只显示了一部分字符串。 要将多行添加到PDF,需要使用
我一直在尝试编辑PDF文档以预填充表单条目。我让它(某种程度上)起作用了。我添加的文本很好。然而,已经存在的其他文本似乎已被替换为“ 救命啊!
页面窗格以缩略图显示仪表板中的所有页面。 添加一个新页面 在仪表板选项卡中,点击页面窗格上的“+”按钮。 将添加一个空白页到仪表板并已选择。 属性 页面的可用属性: 选项 描述 页面大小 自定义仪表板中页面的大小。 背景 设置页面的背景色。如果你选择“图像填充”,则可以选择图像文件和缩放比例选项。 不透明度 设置图像的不透明度。
页面窗格以缩略图显示仪表板中的所有页面。 添加一个新页面 在仪表板选项卡中,点击页面窗格上的“+”按钮。 将添加一个空白页到仪表板并已选择。 属性 页面的可用属性: 选项 描述 页面大小 自定义仪表板中页面的大小。 背景 设置页面的背景色。如果你选择“图像填充”,则可以选择图像文件和缩放比例选项。 不透明度 设置图像的不透明度。