当前位置: 首页 > 知识库问答 >
问题:

如何将JPanel导出到pdf格式,使用iText7导入JPanel中的嵌入式字体、不对称的纸边距和点定位

郭乐意
2023-03-14

我以前没有iText 5的经验,但不到一个月前才开始阅读iText 7。我有一个相当复杂的任务,要将主JTabbedPane中的JPanel显示转换为具有多个同时要求的pdf。我使用Swing指定字体,需要将字体嵌入到PDF中。我需要指定不对称的pdf页边距,并平均分配顶部与底部,以及左与右页边距,使每个JPanel动态地在一张风景美国纸上保持开放。我的通用Java程序使用所有JComponents的每像素x和y定位,并且该程序根据每个JPanel上多个堆叠的JTables的数据内容动态地知道每个完成的JPanel显示的x和y范围。使用100像素每英寸,我的JPanels将不需要缩放,以适应使用我指定的页边距的横向美国信纸大小纸张。

我在developers.itextpdf.com上进行了三次单独的搜索,查询“Export JTable to PDF”、“Export JPanel to PDF”和“Export JFrame to PDF”,但无论我用iText 5还是7进行筛选,都没有找到任何结果。在一般的internet浏览器搜索框中输入相同的查询,会从堆栈溢出(如How2:将JPanel添加到文档,然后导出到PDF)和其他来源中找到多个结果。但是,所有的解决方案都依赖于iText5,因为它们都使用了iText 7中没有的PdfTemplate和PdfContentByte,以及带有getInstance方法的不同版本的PdfWriter。但是,iText7 export JPanel to pdf在StackOverflow上没有显示任何结果。由于我是在iText 7被引入之后开始的,所以如果有人能指点我如何做的话,我更喜欢用iText 7编写我的JPanel到pdf转换的代码。

即使使用了iText 5解决方案,我如何确保在JComponents中指定的单个Java字体被传输到中间Graphics2D(如果iText 7也使用它的话),并与iText字体html" target="_blank">嵌入调用正确链接。另外,我必须修补的事情是转换100像素每英寸在JPanel为72 pts每英寸在pdf和放置pdf媒体盒为适当的边距。我希望简单的数学和一些特别的四舍五入的注意是所有需要的修修补补的部分。请允许我事先感谢你的帮助。

共有1个答案

酆勇
2023-03-14

我也遇到过类似的问题,但我选择了一个简单得多的解决方案。将Swinghtml" target="_blank">组件转换为Java映像是非常容易的,其方式与拍摄正在运行的应用程序的屏幕截图非常相似。一旦有一个包含JPanel内容的大型BufferedImage文件,就可以直接将其写入PDF文档。那么您根本不需要模拟用于填充JTabbedPane的任何Swing代码。

这里有一些代码片段可以帮助您。假设您的应用程序创建了一个JPanel,其中包含诸如jlabel等Swing元素。要将其捕获为Java映像,可以执行以下操作:

JPanel myPan = createPanelForTab1();   <<  your main app code does this

// Take a snapshot of myPan as a Java image
BufferedImg jImg = new BufferedImmage(myPan.getWidth(),
                                      myPan.getHeight(),
                                      BufferedImage.TYPE_INT_ARGB);
myPan.paint(jImg.createGraphics());

然后将Java映像转换为iText映像(它们是不同的东西)。您可能还希望将此图像缩放一点以适合页面:

itextpdf.layout.element.Image itextImg = new Image(
                                            ImageDataFactory.create(jImg, null));
itextImg.scaleToFit(400.0f, 9999.9f);     // (if it's too big)
itextImg.setHorizontalAlignment(HorizontalAlignment.CENTER);
document.add(new Paragraph(iTextImg));

也许这就是要走的路?(注意:由于您正在拍摄屏幕截图,所以您不需要担心PDF中的任何字体要求。但缺点是,PDF中没有来自Java应用程序的文本,因此您无法搜索。)

 类似资料:
  • 如果我在MS Word中保存了带有嵌入字体选项的DOCX文件,我可以在linux中的libreoffice writer gui中打开它,看到它带有linux上没有安装的原始字体。 我也可以从libreoffice writer菜单按钮和嵌入在文件中的字体导出到PDF,它在任何电脑上都很好看。 提前致谢

  • 我正在尝试将字体嵌入到我的pdf/a中。 我找到了很多答案,但使用的是iTextSharp 在我的cas中,我使用iText7,但我所尝试的都是错误的: “所有字体都必须嵌入……” 我有一个ttf文件为我的字体,但我没有找到一种方法嵌入到我的pdf使用它... 有人能帮我吗? 事先谢谢 kor6k

  • 请,我想知道从pdf中提取的字体是否嵌入,如何使用PDFBox实现这一点?

  • 如何从Cassandra或Cassandra cqlsh提示导入和导出模式?

  • 问题内容: 我正在编写一个需要文件打开对话框的Java程序。文件打开对话框并不难,我希望使用。我的问题是我想要一个双窗格(由2组成)。左侧面板上有一个,右侧面板上有一个文件打开对话框。 当我使用它时,将在所有其他窗口上方打开对话框,这不是我想要的。有什么方法可以使(或可能是另一个文件选择对话框)显示在而不在其上方弹出? 这是我尝试过的代码,目前已非常简化。目前,我只是试图将嵌入。 我也打过电话与和

  • 我需要使用Apache FOP后端将docx文档导出到Ubuntu服务器上的PDF/1b。 该文档没有什么花哨的,它使用基本的窗口字体Calibri,Courier New,Times New Roman,Symbol,Wingdings。PDF/A-1b 配置文件需要嵌入所有字体,包括标准的 base-14 字体,所以我从 /usr/share/fonts/type1/urw-base35 中提