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

使用飞碟时以PDF格式打印复选框

宗政和韵
2023-03-14

我正在使用飞碟将超文本标记语言转换为PDF。我想在我的超文本标记语言中使用像CheckBox这样的超文本标记语言输入属性,并将其打印在生成的PDF中。但是当我用html编写复选框代码并生成PDF时,没有用PDF打印的复选框。

<?xml version="1.0" encoding="utf-8" ?>
<html>
<input type="checkbox" name="vehicle" value="Bike"> I have a bike
<input type="checkbox" name="vehicle" value="Car" checked> I have a car
</html>

套餐:

    this.File = Packages.java.io.File;
    this.StringWriter = Packages.java.io.StringWriter;
    this.FileOutputStream = Packages.java.io.FileOutputStream;
    this.ByteArrayOutputStream = Packages.java.io.ByteArrayOutputStream;
    this.ByteArrayInputStream = Packages.java.io.ByteArrayInputStream;
    this.HttpClient = Packages.org.apache.commons.httpclient.HttpClient;
    this.UsernamePasswordCredentials = Packages.org.apache.commons.httpclient.UsernamePasswordCredentials;
    this.Protocol =  Packages.org.apache.commons.httpclient.protocol.Protocol;
    this.SSLProtocolSocketFactory =   Packages.org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory;
    this.AuthScope = Packages.org.apache.commons.httpclient.auth.AuthScope;
    this.GetMethod = Packages.org.apache.commons.httpclient.methods.GetMethod;
    this.PostMethod = Packages.org.apache.commons.httpclient.methods.PostMethod;
    this.StringUtil = Packages.com.glide.util.StringUtil;
    this.StringEntity = Packages.org.apache.http.entity.StringEntity;
    this.SimpleDateFormat = Packages.java.text.SimpleDateFormat;
    this.TimeZone = Packages.java.util.TimeZone;
    this.Date = Packages.java.util.Date;

    // Flying saucer jar references
    //
    this.tidy =  Packages.org.w3c.tidy.Tidy;
    this.domDocument = Packages.org.w3c.dom.Document;
    this.XHTMLPanel =  Packages.org.xhtmlrenderer.simple.XHTMLPanel;
    this.iTextRenderer = Packages.org.xhtmlrenderer.pdf.ITextRenderer;



    var bos = new this.ByteArrayOutputStream();
    var inputString = this.htmlResponse;
    this.debug("HTML RESPONSE" + inputString);
    var inputStream = new this.ByteArrayInputStream(inputString.getBytes());

    var outputForPdfStream  = new this.ByteArrayOutputStream();

    // tidy the html
    var domdoc =  this.domDocument;
    var iTidy = new this.tidy();
    iTidy.setShowWarnings(false);
    iTidy.setXmlTags(false);
    iTidy.setInputEncoding("UTF-8");
    iTidy.setOutputEncoding("UTF-8");
    iTidy.setXHTML(true);//
    iTidy.setMakeClean(true);
    domdoc = iTidy.parseDOM(inputStream, outputForPdfStream);

    // Convert the document to XHTML panel and then rendering it into a PDF

    var xhtmlPanel = new this.XHTMLPanel();
    xhtmlPanel.setDocument(domdoc);


    var renderer = new this.iTextRenderer();
    renderer.setDocument(xhtmlPanel.getDocument(), null);
    renderer.layout();
    renderer.createPDF(bos);
    bos.flush();
    inputStream.close();
    this.debug("INPUT STREAM" + inputStream);

    var byteArray = bos.toByteArray();
    var encodedString  = this.StringUtil.base64Encode(byteArray);
    this.debug("Encoded String" + encodedString);

我需要使用任何特定的包来打印PDF中的复选框吗。如果你有任何问题,请告诉我。任何帮助都将不胜感激。非常感谢。

共有1个答案

班玉堂
2023-03-14

pdf中不支持复选框。在转换之前将它们替换为图像。我们在项目中也在做类似的事情。

org.jsoup.nodes.Document doc = Jsoup.parse(formContent);

然后处理 html 标记输入,

String inputElementTag = inputElement.tagName();
 switch (inputElementTag) {
        case HTML_TAG_INPUT:
            String inputType = inputElement.attr(HTML_ATTR_TYPE);
            switch (inputType) {
            case HTML_INPUT_CHECKBOX:
                processCheckbox(inputElement, value);
                break;
            }
        }

然后替换为图像

private void processCheckbox(Element inputElement, String value) {
        if (value != null && Boolean.valueOf(value)) {
            inputElement.attr(HTML_ATTR_CHECKED, HTML_ATTR_CHECKED);
            inputElement.before(String.format(HTML_IMAGE_CHECKBOX,
                    inputElement.attr(HTML_ATTR_STYLE),
                    inputElement.attr(HTML_ATTR_CLASS),
                    IMAGE_CHECKED));
        } else {
            inputElement.removeAttr(HTML_ATTR_CHECKED);
            inputElement.before(String.format(HTML_CHECKBOX_EMPTY_HTML,
                    inputElement.attr(HTML_ATTR_STYLE),
                    inputElement.attr(HTML_ATTR_CLASS),
                    IMAGE_UNCHECKED));
        }
        inputElement.remove();
    }

要解析html并替换,您可以使用J汤

 类似资料:
  • 使用飞碟以PDF格式打印图像。 超文本标记语言代码: 当我使用飞碟将HTML转换为PDF时。生成的PDF不会打印图像。 我需要使用任何特定的软件包来打印PDF格式的图像吗。如果你有任何问题,请告诉我。

  • 我试图通过使用飞碟(9.0.7)库从XHTML生成一个PDF文件。文本和表格按预期呈现,但图像(png)不会显示在最终的PDF中。图像由绝对文件路径引用(例如< code > 我的java代码如下: 任何帮助都将不胜感激。

  • 我使用的罐子来自maven repo 我正在测试的代码来自以前的堆栈解决方案 我担心它可能过时了,因为图书馆被贬值了。测试以下代码时: 这一行我有以下错误:

  • 我正在尝试使用flyingsaucer将html文档保存为PDF,但当我查看Adobe Reader中的文档属性(页面大小:8.26 x 11.69英寸)时,生成的文档最终总是具有A4维度。 我确实阅读了文档,我正在传递css@page{size:letter;}风格虽然它确实对输出有影响,但在Adobe Reader中,页面大小始终保持在8.26 x 11.69。例如,如果我将页面大小设置为le

  • 我正在使用飞碟生成pdf文件。我想要第一页,第二页是横向模式,其余的是纵向模式。所以,我这样做: 但是它会自动在第一个pdf文件中创建2个空白页?如何修复它?

  • 我有一个jsp文件,我喜欢使用飞碟将其转换为PDF。以下是jsp文件: 以下是我用于将html解析为pdf的servlet代码: } } 我有个例外 有人能帮我吗?有没有可能从这种html页面创建pdf