微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

itext7 pdfhtml 标题和屏幕阅读器的问题?

如何解决itext7 pdfhtml 标题和屏幕阅读器的问题?

我正在使用 html 到 pdf 功能开发 iText7。

我刚刚注意到每个页面上设置的Header都有这个问题。屏幕阅读器不会读取标题。 文档的其余部分与屏幕阅读器完美配合。我需要它进行可访问性检查。

这是我设置标题的方式:

<html>
<head>
    <link rel="stylesheet" href="{...}pdf/css/style.css" type="text/css" />
    <style>
        #header {
            position: running(header);
        }
        @page {
            margin-top: 100px;
            @top-left {
                content: element(header);
            }
        }
    </style>
</head>
<body>
<div id="header">
    <table width="100%">
        <tr>
            <td colspan="2">&nbsp;</td>
        </tr>
        <tr>
            <td><span class="...">{...}</span></td>
            <td rowspan="2" class="... ..."><span><img src="{...}pdf/images/..." alt="..." /></span></td>
        </tr>
        <tr>
            <td><span class="...">{...}</span></td>
        </tr>
    </table>
</div>...
...
...

解决方法

对于屏幕阅读器,我没有找到任何办法让它在纯 HTML 中工作。

如果将来有人有一些想法,肯定会受到赞赏。

现在我编写了开始新页面的事件处理程序。

我正在做一些改进,但像这样:

public class SomePdfCreationClass {

    public SomeReturnType createPdf {
        ...
        
        Header headerHandler = new Header(String header1,List<String> subHeaders);
        pdf.addEventHandler(PdfDocumentEvent.START_PAGE,headerHandler);
         
        HtmlConverter.convertToPdf(htmlFile,pdf,converterProperties);
        
        writer.close();
        pdf.close();
        
        ...
    }
    
    protected class Header implements IEventHandler {
        
        private String header1;
        private List<String> subHeaders;

        public Header(String header1,List<String> subHeaders) {
            this.header1 = header1;
            this.subHeaders = subHeaders;
        }

        @Override
        public void handleEvent(Event event) {

            try {
                PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
                PdfDocument pdf = docEvent.getDocument();
                PdfPage page = docEvent.getPage();

                PdfDictionary pdfObject = page.getPdfObject();

                PdfCanvas headerPdfCanvas = new PdfCanvas(page.newContentStreamBefore(),page.getResources(),pdf);
                Rectangle headerRect = new Rectangle(35,740,495,96);
                Canvas headerCanvas = new Canvas(headerPdfCanvas,headerRect);

                headerCanvas.setFontProvider(fontProviderService.getFontProvider());
                PdfFont font = PdfFontFactory.createFont(staticResourcesPath + "...ttf",PdfEncodings.IDENTITY_H,true);
                headerCanvas.setFontSize(18).setFont(font);

                headerCanvas.enableAutoTagging(page);
                CreateHeaderContent(headerCanvas);
                headerCanvas.close();

            } catch (IOException e) {
                ...
            }
        
        }
        
        private void CreateHeaderContent(Canvas canvas) throws MalformedURLException
        {
            Table table = new Table(UnitValue.createPercentArray(new float[] { 80,20 } ));
            table.setWidth(UnitValue.createPercentValue(100));
    
            Cell cell1 = new Cell().add(new Paragraph(header1).setBold().setFontSize(11).setTextAlignment(TextAlignment.LEFT));
            for (int i = 0; i < subHeaders.size(); i++) {
                cell1.add(new Paragraph(subHeaders.get(i)).setFontSize(8).setTextAlignment(TextAlignment.LEFT));
            }
            cell1.setBorder(Border.NO_BORDER);
            table.addCell(cell1);

            ImageData imageData = ImageDataFactory.create(staticResourcesPath + "...png");
            Image image = new Image(imageData);
            image.getAccessibilityProperties().setAlternateDescription("...");
            Cell cell2 = new Cell().add(image.setTextAlignment(TextAlignment.RIGHT));
            cell2.setBorder(Border.NO_BORDER);
            
            cell2.setVerticalAlignment(VerticalAlignment.MIDDLE);
            table.addCell(cell2);
    
            canvas.add(table);
        }
        
    }
    
}

这样做我不得不删除标题的html:

<html>
<head>
    <link rel="stylesheet" href="..." type="text/css" />
</head>
<body>
...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。