java - 使用 Java iText 在圆圈内插入多个段落和图像
问题描述
我想使用 java itext 为 CD 生成一个 pdf 标签。我画了圆圈,但我无法在圆圈内设置图像和多个段落。下面是代码片段。代码片段
String printingPath = "CD_label.pdf";
Document document = new Document(new Rectangle(PageSize.A4));
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(printingPath));
document.open();
PdfContentByte cb = writer.getDirectContent();
cb.setRGBColorFill(0xFF, 0xFF, 0xFF);
BaseColor colorval = new BaseColor(102,178,255);
cb.setColorStroke(colorval);
cb.circle(300.0f, 650.0f, 150.0f);
cb.circle(300.0f, 650.0f, 20.0f);
cb.stroke();
//cb.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA,BaseFont.CP1257,BaseFont.EMBEDDED), 10);
//cb.beginText();
//cb.resetRGBColorStroke();
//cb.setTextMatrix(320, 420);
//cb.showText("Text inside cd");
// ColumnText.showTextAligned(cb, Element.ALIGN_LEFT,new Phrase("Hello itext"),50, 700, 0); cb.endText();
Image img = Image.getInstance("Symbol.png");
img.setAbsolutePosition(270f, 740f);
img.scaleAbsolute(60, 34);
document.close();
解决方案
为什么看不到你的文字?
您将填充颜色设置为白色:
cb.setRGBColorFill(0xFF, 0xFF, 0xFF);
文本(通常)是通过填充以某种字体定义的字形轮廓来绘制的。因此,您未注释的文本绘图代码
cb.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA,BaseFont.CP1257,BaseFont.EMBEDDED), 10);
cb.beginText();
cb.resetRGBColorStroke();
cb.setTextMatrix(320, 420);
cb.showText("Text inside cd");
ColumnText.showTextAligned(cb, Element.ALIGN_LEFT,new Phrase("Hello itext"),50, 700, 0);
cb.endText();
确实在WHITE on WHITE中绘制文本...
如果您删除该cb.setRGBColorFill
说明(或选择明显不同的填充颜色),您将看到您的文本:
(点 (320, 420) 显然位于中心 (300, 650) 和半径 150 的圆之外,因此您的“CD 内文本”文本也是如此......)
另一个问题:ColumnText.showTextAligned
启动它自己的文本对象,所以要创建一个有效的 PDF,你必须在你的cb.endText()
:
cb.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA,BaseFont.CP1257,BaseFont.EMBEDDED), 10);
cb.beginText();
cb.resetRGBColorStroke();
cb.setTextMatrix(320, 420);
cb.showText("Text inside cd");
cb.endText();
ColumnText.showTextAligned(cb, Element.ALIGN_LEFT,new Phrase("Hello itext"),50, 700, 0);
为什么看不到你的头像?
因为你不加!
如果您将其添加到您的PdfContentByte cb
Image img = Image.getInstance("Symbol.png");
img.setAbsolutePosition(270f, 740f);
img.scaleAbsolute(60, 34);
cb.addImage(img);
结果变成这样:
(我显然没有你的图片,所以我使用了一个简单的示例图片。)
推荐阅读
- java - 导入项目时,Android Studio 未创建 .apk 文件
- bcrypt - 对 bcrypt 和其他基于哈希的算法的担忧
- php - PHP Curl 模拟 Web 浏览器对 Endomondo 的请求
- postgresql - postgres 函数参数是通过引用还是值传递?
- c++ - 无法通过引用 std::exception 来捕获从 std::exception 派生的类
- java - Jacoco:查找外部测试的代码覆盖率
- c# - 从 UWP 应用取消链接用户/订阅许可证
- documentum - 文档错误:[DFC_OBJPROTO_BAD_NUMBER_FORMAT]
- javascript - 单击切换图像时添加文本
- javascript - 如何在Vue js中计算折扣