精华内容
下载资源
问答
  • java生成pdf字体和模板

    2017-07-24 22:31:46
    java生成pdf字体和模板
  • java生成PDF字体库包+PDF包 完美匹配 itext-4.2.0.jar itext-asian-5.2.0.jar 亲测成功
  • PageSize.A4=595 x 842A4尺寸=210mm×297mm故设置纸张大小:public static final Rectangle EXP = new RectangleReadOnly(283.0F, 425.0F);补充:解决iText生成pdf文件过大的问题为iText生成的pdf文件瘦身。原来生成...

    做快递面单打印模板,快递要求纸张大小100 x 150mm。

    PageSize.A4=595 x 842

    A4尺寸=210mm×297mm

    故设置纸张大小:

    public static final Rectangle EXP = new RectangleReadOnly(283.0F, 425.0F);

    补充:解决iText生成pdf文件过大的问题

    为iText生成的pdf文件瘦身。

    原来生成pdf文件,即使是纯文本内容,无论内容再如何少,文件体积总是在7M多,导致传输速度很慢。经排查,是在pdf生成的时候,选用了第三方中文字体造成的。

    原生成PDF代码中,有如下语句:

    bfChinese = BaseFont.createFont("c://windows//fonts//SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

    这种情况下,iText会将字体TTF文件一同打包进pdf文件中,造成文件很大。

    解决方法

    是把这句改写为:

    BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);

    同时,需要引入itext-asian,使用maven:

    com.itextpdf

    itext-asian

    5.2.0

    这样,原来7M多的文件,现在只有100K左右了。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

    展开全文
  • 使用iText替换PDF中的字体Java

    千次阅读 2021-03-07 22:32:41
    // create a reader object PdfReader reader = new PdfReader(RESULT1); int n = reader.getXrefSize(); PdfObject object; PdfDictionary font; PdfStamper stamper = new PdfStamper(reader, new ...

    public void manipulatePdf(String src, String dest) throws IOException, DocumentException {

    // the font file

    RandomAccessFile raf = new RandomAccessFile(FONT, "r");

    byte fontfile[] = new byte[(int)raf.length()];

    raf.readFully(fontfile);

    raf.close();

    // create a new stream for the font file

    PdfStream stream = new PdfStream(fontfile);

    stream.flateCompress();

    stream.put(PdfName.LENGTH1, new PdfNumber(fontfile.length));

    // create a reader object

    PdfReader reader = new PdfReader(RESULT1);

    int n = reader.getXrefSize();

    PdfObject object;

    PdfDictionary font;

    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT2));

    PdfName fontname = new PdfName(FONTNAME);

    for (int i = 0; i < n; i++) {

    object = reader.getPdfObject(i);

    if (object == null || !object.isDictionary())

    continue;

    font = (PdfDictionary)object;

    if (PdfName.FONTDESCRIPTOR.equals(font.get(PdfName.TYPE))

    && fontname.equals(font.get(PdfName.FONTNAME))) {

    PdfIndirectObject objref = stamper.getWriter().addToBody(stream);

    font.put(PdfName.FONTFILE2, objref.getIndirectReference());

    }

    }

    stamper.close();

    reader.close();

    }

    这(不fontname.equals(font.get(PdfName.FONTNAME))测试)可能是你的任务的简单情况的起点。

    你必须做很多关于编码的测试,并为更通用的解决方案添加一些单独的翻译。你可能想研究第9部分文本的PDF规范

    展开全文
  • PDF中,您通常使用带粗体字形的字体使文本变为粗体,另请参阅第二个问题。 如果你手上没有这么大胆的字体,你可能会使用一些穷人大胆的技巧,例如不仅填充字母而且还沿着边框抚摸一条线:public static void ...

    使用穷人的大胆

    我如何大胆的领域? ......我需要设置哪些大胆的字段?

    在PDF中,您通常使用带粗体字形的字体使文本变为粗体,另请参阅第二个问题。 如果你手上没有这么大胆的字体,你可能会使用一些穷人大胆的技巧,例如不仅填充字母而且还沿着边框抚摸一条线:

    public static void setFieldBold(String name, String value) throws IOException

    {

    PDDocumentCatalog docCatalog = _pdfDocument.getDocumentCatalog();

    PDAcroForm acroForm = docCatalog.getAcroForm();

    PDField field = acroForm.getField(name);

    COSDictionary dict = ((PDField) field).getDictionary();

    COSString defaultAppearance = (COSString) dict

    .getDictionaryObject(COSName.DA);

    if (defaultAppearance != null)

    {

    dict.setString(COSName.DA, "/Helv 10 Tf 2 Tr .5 w 0 g");

    if (name.equalsIgnoreCase("Field1")) {

    dict.setString(COSName.DA, "/Helv 12 Tf 0 g");

    }

    }

    if (field instanceof PDTextbox)

    {

    field = new PDTextbox(acroForm, dict);

    ((PDField) field).setValue(value);

    }

    }

    ( 2 Tr .5 w =使用渲染模式2,即填充和描边,并使用.5的线宽)

    代替

    aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9mcGJiUy5wbmc=

    你现在得到了

    aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9CRDJBRS5wbmc=

    使用自定义字体

    如果我理解正确的话,我可以在开箱即用的PDFBox中使用14种基本字体(双关语无意)。 我想使用一个或多个看起来像Signatures(草书)的字体。 任何开箱即用的字体都可以吗? 如果没有,如果我有自己的字体,如何设置要写入PDF的方法?

    如果您想使用自己的字体,首先需要在AcroForm默认资源中注册它,如下所示:

    public String prepareFont(PDDocument _pdfDocument) throws IOException

    {

    PDDocumentCatalog docCatalog = _pdfDocument.getDocumentCatalog();

    PDAcroForm acroForm = docCatalog.getAcroForm();

    PDResources res = acroForm.getDefaultResources();

    if (res == null)

    res = new PDResources();

    InputStream fontStream = getClass().getResourceAsStream("LiberationSans-Regular.ttf");

    PDTrueTypeFont font = PDTrueTypeFont.loadTTF(_pdfDocument, fontStream);

    String fontName = res.addFont(font);

    acroForm.setDefaultResources(res);

    return fontName;

    }

    此方法返回要使用的字体名称

    public static void setField(String name, String value, String fontName) throws IOException

    {

    PDDocumentCatalog docCatalog = _pdfDocument.getDocumentCatalog();

    PDAcroForm acroForm = docCatalog.getAcroForm();

    PDField field = acroForm.getField(name);

    COSDictionary dict = ((PDField) field).getDictionary();

    COSString defaultAppearance = (COSString) dict

    .getDictionaryObject(COSName.DA);

    if (defaultAppearance != null)

    {

    dict.setString(COSName.DA, "/" + fontName + " 10 Tf 0 g");

    if (name.equalsIgnoreCase("Field1")) {

    dict.setString(COSName.DA, "/" + fontName + " 12 Tf 0 g");

    }

    }

    if (field instanceof PDTextbox)

    {

    field = new PDTextbox(acroForm, dict);

    ((PDField) field).setValue(value);

    }

    }

    你现在得到了

    aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9jUWlFTi5wbmc=

    差别不是太大,因为字体非常相似。 使用您选择的字体以获得更多效果。

    使用/ Helv , / HeBo ,......

    OP找到了一个字体名称列表/ Helv , / HeBo ,...,可能在PDFBox问题PDFBOX-1234中 ,它似乎可用,而无需在任何资源字典中定义它们。

    这些名称不是PDF功能 ,即PDF规范不了解它们,相反:

    默认外观字符串( DA )包含用于建立图形状态参数(例如文本大小和颜色)所需的任何图形状态或文本状态运算符,用于显示字段的变量文本。 只有文本对象中允许的运算符才会出现在该字符串中(参见图9)。 该字符串至少应包含一个Tf (文本字体)运算符及其两个操作数,字体和大小。 指定的字体值应与默认资源字典的Font条目中的资源名称匹配(从交互式表单字典的DR条目引用;请参阅表218)。

    (第12.7.3.3节ISO 32000-1中的字段词典/可变文本)

    因此,规范不知道那些默认字体名称。

    尽管如此,Adobe Reader / Acrobat似乎支持它们,很可能是因为在遥远的过去的某个时间,某些表单生成工具假定它们在那里并且由于兼容性原因而保留了对这些表单的支持。

    因此,使用此功能可能不是最佳选择,但您的里程可能会有所不同。

    使用自定义和标准字体

    在他的评论中,OP表示他想在表格中使用自定义和标准字体。

    为此,我将方法prepareFont概括了一下,并将TTF导入重构为一个单独的方法:

    public List prepareFont(PDDocument _pdfDocument, List fonts) throws IOException

    {

    PDDocumentCatalog docCatalog = _pdfDocument.getDocumentCatalog();

    PDAcroForm acroForm = docCatalog.getAcroForm();

    PDResources res = acroForm.getDefaultResources();

    if (res == null)

    res = new PDResources();

    List fontNames = new ArrayList();

    for (PDFont font: fonts)

    {

    fontNames.add(res.addFont(font));

    }

    acroForm.setDefaultResources(res);

    return fontNames;

    }

    public PDFont loadTrueTypeFont(PDDocument _pdfDocument, String resourceName) throws IOException

    {

    try ( InputStream fontStream = getClass().getResourceAsStream(resourceName); )

    {

    return PDTrueTypeFont.loadTTF(_pdfDocument, fontStream);

    }

    }

    使用这些方法,您可以混合自定义和标准字体,如下所示:

    PDDocument doc = PDDocument.load(originalStream);

    List fontNames = prepareFont(doc, Arrays.asList(loadTrueTypeFont(doc, "LiberationSans-Regular.ttf"), PDType1Font.HELVETICA_BOLD));

    setField(doc, "FirstName", "My first name", fontNames.get(0));

    setField(doc, "LastName", "My last name", fontNames.get(1));

    doc.save(new File(RESULT_FOLDER, "acroform-setFieldCustomStandard.pdf"));

    doc.close();

    ( FillFormCustomFont .testSetFieldCustomStandard_acroform)

    导致

    aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9FZkZ3UC5wbmc=

    PDType1Font具有所有14种标准字体的常量。 因此,像这样你可以在表单字段中使用标准字体(如果需要,与自定义字体混合),在默认资源中生成正确的字体条目,即不依赖于像HeBo这样的专有默认字体名称。

    PS

    有关/ Helv 10 Tf 0 g排列顺序的任何文件?

    展开全文
  • JavaPDF和Excl表格的一些处理包,还有处理pdf输出乱码或者无法输出的.jar包,真正的干货,而且还可以关注我的博客哦。Cs_hnu_scw
  • I am using iText to split and merger the PDF, I need your help to reduce (compress) the output PDF size programmatically. Please let me know the steps to achieve the same. 解决方案 With writer....

    Document document = new Document(reader.getPageSizeWithRotation(1));

    PdfCopy writer = new PdfCopy(document, new FileOutputStream(outFile));

    document.open();

    PdfImportedPage page = writer.getImportedPage(reader, ++i);

    writer.setFullCompression();

    writer.addPage(page);

    document.close();

    writer.close();

    I am using iText to split and merger the PDF, I need your help to reduce (compress) the output PDF size programmatically. Please let me know the steps to achieve the same.

    解决方案

    With writer.setFullCompression() you already compressed file as much as possible. With iText you can't do anything more.

    展开全文
  • java使用itext生成pdf文件-设置字体,itextpdf,import com.limport com.lowagie.text.Document;import com.lowagie.text.Font;import com.lowagie.text.FontFactory;import com.lowagie.text.PageSize;import ...
  • package ...import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import org.junit.Test;import org.springframework.format.ann...
  • word转pdf字体文件

    2018-12-21 14:33:46
    Java版 poi word转pdf时,服务器上没有字体时,或访问不到字体时,可以自己在resource资源目录下添加此字体
  • I am using Apache PDFBox to read a fillable PDF form and fill the fields based on some data. I am using the below code (as per suggestions from other SO answers) to get the default Appearance String a...
  • 包括:设置纯色背景设置图片背景使用工具Spire.PDF for Java 2.0.3Jar文件引用:方法一步骤 1:在Java程序中新建一个文件夹可命名为Lib。下载安装包后,解压,将解压后的文件夹下的子文件夹lib中的Sp...
  • import com.spire.pdf.PdfDocument;import com.spire.pdf.PdfPageBase;import ...import java.awt.*;public class AlignText {public static void main(String[] args) {//创建PdfDocument对象Pdf...
  • java-pdf-itext7、itextpdf 生成pdf 文档,使用pdf模板生成(支持中文字体)itext7 内置对中文(CJK字体)进行了支持,不在依赖其他组件。//处理中文问题PdfFont font = PdfFontFactory.createFont("STSongStd-Light", ...
  • wkHtmlToPdf 的简单使用我在这里就不说了,今天主要说一下 设置 自定义字体问题,我经过很多次的测试,终于成功。 1、上代码 import java.io.File; import java.io.IOException; public class WkHtmlToPdf { ...
  • [java]代码库/*** 写PDF文件,展示了PDF文档、章节、小节、字体、段落、表格、列表的使用* 最后展示如何使用写入中文。* @param fileName*/public void writePDF(String fileName) {File file = new File(fileName);...
  • javapdf转jpg

    2018-11-15 11:44:57
    javapdf转jpg
  • 相信用过itext的朋友都知道,中文显示一直都是个问题(最新版5.5.7官方也没直接...在此之前,需要准备的仅仅为itextpdf-5.x.jar 和一个 ttf格式的中文字体。比如我们常用的宋体simsun.ttf。我们首先要做的,就是将...
  • 基于pdfbox的pdf转图片,发票pdf转图片,网络pdf转图片,基于pdfbox开发的demo,下载即用;
  • pdf 编辑器使用的是 Adobe Acrobat Pro DC。 出现的问题大概如下: 字体找不到导致报错的 字体选择不对,导致部分中文不显示 文本属性选择问题导致文本内容很小 问题大致记录一下,下面写一下调整细节。 2.调整 ...
  • 主要介绍了JavaPDF中添加表格过程详解,本文将介绍通过Java编程在PDF文档中添加表格的方法。添加表格时,可设置表格边框、单元格对齐方式、单元格背景色、单元格合并、插入图片、设置行高、列宽、字体、字号等,...
  • PageSize.A4=595 x 842A4尺寸=210mm×297mm故设置纸张大小:public static final Rectangle EXP = new RectangleReadOnly(283.0F, 425.0F);补充:解决iText生成pdf文件过大的问题为iText生成的pdf文件瘦身。原来生成...
  • 如下代码使用itext生成pdf文件,通过设置中文字体避免乱码。/*** AsianTest.java*/import java.io.FileOutputStream;import java.io.IOException;import com.lowagie.text.*;import com.lowagie.text.pdf.PdfWriter;...
  • 基于apache pdfbox库实现Java PDF转图片,带源码和pom文件; 开发环境导入maven工程,PdfToImg为测试类,修改其中test.pdf和test.png的路径即可运行; PDFUtil为独立工具类,可放置任何工程中运行。 如果在linux...
  • JAVA替换PDF文字

    2021-02-12 12:45:55
    1 importcom.itextpdf.text.BaseColor;2 importcom.itextpdf.text.Font;3 importcom.itextpdf.text.Rectangle;4 importcom.itextpdf.text.pdf.BaseFont;5 importcom.itextpdf.text.pdf.PdfContentByte;6 importcom.i...
  • Itext导出PDF,中文不显示字体,在body上设置font-family: "Arial Unicode MS",同时在java中引入fontResolver.addFont("/ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 就可以显示中文了
  • How to check that all fonts that are used in a PDF file are embedded in the file with Java and iText? I have some existing PDF documents, and I'd like to validate that they use only embedded fonts.Thi...
  • java使用了itext7将PDF文件转成png图片格式,里面有demo可以直接运行,希望给需要的朋友带来帮助,谢谢支持!
  • linux java 中文字体

    2011-10-28 15:02:39
    linux java 中文字体 linux java 中文字体
  • 最近搞了一个项目,需要生成投保电子凭证的pdf文件,之前在项目也用了这个组件,只是很多年前别人开发的,我只是项目负责人而已,想起以前的项目就找了ireport这个做为生成pdf的工具。一开始捣鼓了好久,中午不显示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,751
精华内容 7,100
关键字:

java设置pdf字体

java 订阅