从 PDF.js 升级到 PDF.js Express

Upgrade From PDF.js to PDF.js Express

提问人:Ravindu Yasith 提问时间:10/13/2023 最后编辑:Roman CRavindu Yasith 更新时间:10/13/2023 访问量:68

问:

我正在开发一个Java JSP Struts项目,该项目以前已经实现了PDF.js来预览文档。由于 PDF.js 库不支持水印选项,我决定迁移到 PDF.js Express

以下代码片段是前面的实现

HTML 正文

<iframe id="content" style='height: 600px; width: 98%; min-width: 900px;' scrolling="no" src=""></iframe>

脚本

<script type="text/javascript">
    $(document).ready(function() {
        var base='web/viewer.html?file=';
        var subUrl=encodeURIComponent('${pageContext.request.contextPath}/getImage.do?imageDocID='+document.getElementById('imageDocID').value);
        var url=base+subUrl+'#page=1';
        $('#content').attr('src',url);
    });
</script>

将转到页面并生成并获取 PDF 文件,getImage.doGetImageAction.java

struts-配置

<action  
    path="/getImage"
    type="web.ead.webapp.ssd.common.action.GetImageAction"
    scope="request">
</action>

GetImageAction.java

public class GetImageAction extends GenericAction {
    
    static Object imageServerLock = new Object();
    
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException, Exception {

        UserProfile userProfile = (UserProfile) request.getSession().getAttribute("UserProfile");
        
        ActionForward actionForward = null;
        String imageDocID = request.getParameter("imageDocID");
        if (actionForward == null)
        {
            byte[] appletData = ImageManager.getMod2TifImage(imageDocID);
            ObjectOutputStream outputToApplet = new ObjectOutputStream(response.getOutputStream());
            outputToApplet.writeObject(appletData);
            outputToApplet.flush();
            outputToApplet.close();

            actionForward = null;
        }
        
        

        return actionForward;

        ActionForward actionForward = null;
        try{

            actionForward = super.execute(mapping, form, request, response);
            
            String imageDocID = request.getParameter("imageDocID");

            System.out.println(new Timestamp(System.currentTimeMillis()).toString() + "\trequest.getRemoteAddr() "
                    + request.getRemoteAddr() 
                    + " Utility.getClientIp(request) : "
                    + Utility.getClientIp(request) + " - " + imageDocID
                    + " UserProfileID: " + userProfile.getUserProfileID());
            byte[] image = null;
            synchronized (imageServerLock) {
                
                if(request.getSession().getAttribute("IMAGE-"+imageDocID) != null)
                    image = (byte[]) request.getSession().getAttribute("IMAGE-"+imageDocID);
                
                if (actionForward == null) {
                    byte[] dest = addWatemark(image);
                    
                    try{
                        PdfReader reader = new PdfReader(dest);
                        int pages = reader.getNumberOfPages();
                    }catch(Exception ex){
                        ex.printStackTrace();
                        image = ImageManager.optimizePDF(image);
                        dest = addWatemark(image);
                    }
                    
                    response.setContentType("application/pdf");
                    OutputStream outs = response.getOutputStream();
                    outs.write(dest);
                    outs.close();
                    actionForward = null;
                    if(request.getSession().getAttribute("IMAGE-"+imageDocID) != null)
                        request.getSession().removeAttribute("IMAGE-"+imageDocID);
                    
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }

        LoggerUtils.info(this.getClass().getName() + " - execute method --> Exit");
        return actionForward;
    }

当我添加新的PDF.js Express时,它说要使用此格式。

因为我没有生成的pdf文件的直接路径,所以我无法使用该属性。initialDoc

你能建议我使用PDF.js Express的任何解决方案

java jsp pdf.js struts-1

评论

0赞 Roman C 10/13/2023
它需要详细信息,GetImageAction.java,struts-config.xml等。
0赞 Ravindu Yasith 10/13/2023
@RomanC这是 Struts 配置文件<action path="/getImage" type="web.ead.webapp.ssd.common.action.GetImageAction" scope="request"> </action>

答:

0赞 Roman C 10/13/2023 #1

您可以使用图像操作的直接路径。

initialDoc = '${pageContext.request.contextPath}/getImage.do?imageDocID='+document.getElementById('imageDocID').value;

评论

0赞 Ravindu Yasith 10/14/2023
我已经尝试过了,并且此错误显示在PDF.js Express UI中,initialDoc值为%2FWEB_SSD%2FgetImage.do%3FimageDocID%3DWW222244 ,所以我认为“.”后面的字符串被标识为文件扩展名。File extension do%3fimagedocid%3dww222244 is not supported. Please see http://r.pdftron.com/fileformats for a full list of file formats supported by WebViewer. If this file is actually valid then you can pass the 'extension' option with the intended file extension e.g. const doc = await Core.createDocument("http://domain/file11243. php", [extension: "pdf"})
0赞 Roman C 10/14/2023
是的,它是一个文件扩展名。您需要添加消息中所述的扩展选项。
0赞 Ravindu Yasith 10/17/2023
.do 不是文件扩展名,它是一种路由技术,用于重定向到 struts 中的指定 Servlet。但是initialDoc需要一个具有.pdf的文件路径那么有谁知道,如果我有一个pdf文件的字节数组,我可以将其设置为这个initialDoc或任何其他技术以与PDF.js Express中的WebViewer一起使用吗?
0赞 Roman C 10/17/2023
我在WebViewer的文档中看到,它可以使用远程地址来加载文档,并且文件使用什么扩展名并不重要。