我正在尝试创建PDDocument
,然后向其添加两个页面。
第一个包含文本“第一页”,第二个包含空白。
然后我将PDDocument
拆分并将其放入列表中。
当我尝试访问第一页(通过使用get方法)时,我保存它期望看到带有文本“第一页”的pdf但是我得到一个空白页面。
有什么建议吗?
package split;
import java.io.File;
import java.util.List;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.util.Splitter;
public class pdfSplit {
public static void main(String[] args) throws Exception {
PDPage page1, page2;
page1 = new PDPage();
page2 = new PDPage();
Splitter splitter = new Splitter();
PDDocument document = new PDDocument();
document.addPage(page1);
document.addPage(page2);
List<PDDocument> splittedPDF = splitter.split(document);
PDFont font = PDType1Font.HELVETICA_BOLD;
PDPageContentStream contentStream = new PDPageContentStream(document, page1);
contentStream.beginText();
contentStream.setFont( font, 50 );
contentStream.moveTextPositionByAmount( 100, 700 );
contentStream.drawString( "First page" );
contentStream.endText();
contentStream.close();
document = splittedPDF.get(0); //No effect
document.save("Random.pdf");
}
}
答案 0 :(得分:1)
您的页面为空白,因为您在写入页面内容流之前进行了拆分。解决方案:在关闭内容流后移动拆分代码。因此,正确的代码如下所示:
PDPage page1, page2;
page1 = new PDPage();
page2 = new PDPage();
Splitter splitter = new Splitter();
PDDocument document = new PDDocument();
document.addPage(page1);
document.addPage(page2);
PDFont font = PDType1Font.HELVETICA_BOLD;
PDPageContentStream contentStream = new PDPageContentStream(document, page1);
contentStream.beginText();
contentStream.setFont(font, 50);
contentStream.moveTextPositionByAmount(100, 700);
contentStream.drawString("First page");
contentStream.endText();
contentStream.close();
// now the page is filled!
List<PDDocument> splittedPDF = splitter.split(document);
document = splittedPDF.get(0);
document.save("Random.pdf");
(这个答案是在1.8.10版本中完成的)