用swfTools转换PDF时有些文件转换不了,但是可以用CMD命令转换
我用JAVA程序调用swfTools把PDF转换为swf文件,但是不知道为什么用的可以转换有的转换不了,我本来以为是和PDF文件大小有关系,但是试了几个文件都是一个问题。所以我觉得应该是程序本身出了点问题,但是具体找不到是哪里。希望前辈们给指点一下
这是被调用调用方法
public static void convert(String pdf2swfPath, String pdfFile, String to, int flashVersion) { Runtime r = Runtime.getRuntime(); Process p = null; try { // 通过Runtime.getRunTime().exec()来调用其他程序 String command = pdf2swfPath + " " + """ + pdfFile + """ + " -o " + """ + to + """ + " -T " + flashVersion; System.out.println(command); p = r.exec(command); // p.waitFor(); // 获取进程的输出流来模拟cmd命令行的输出,非必须 InputStream is = p.getInputStream(); InputStreamReader isr = new InputStreamReader(is); int tempchar; while ((tempchar = isr.read()) != -1) { // 对于windows下,rn这两个字符在一起时,表示一个换行。 // 但如果这两个字符分开显示时,会换两次行。 // 因此,屏蔽掉r,或者屏蔽n。否则,将会多出很多空行。 if (((char) tempchar) != 'r') { System.out.print((char) tempchar); } } } catch (IOException e) { e.printStackTrace(); } finally { p.destroy(); } }这是调用方法
public ActionForward upload(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { if (!PCK.HasPrivelege(request, "USER_DELETE")) return PCK.RedirectToNoPrivelegePage(request, mapping); UpfileForm upfileForm = (UpfileForm) form; FormFile file = upfileForm.getFile(); FileOutputStream fileOutput; if (file != null) { try { File file1 = new File(getServlet().getServletContext() .getRealPath("\upload")); if (!file1.exists()) { file1.mkdir(); File file_swf = new File(getServlet().getServletContext() .getRealPath("\upload\swf")); if (!file_swf.exists()) { file_swf.mkdir(); } } fileOutput = new FileOutputStream(getServlet() .getServletContext().getRealPath("\upload\") + "\" + file.getFileName()); fileOutput.write(file.getFileData()); fileOutput.flush(); fileOutput.close(); String filename = file.getFileName(); // 进行字符串截取,只能上传pdf文件 String filepath = getServlet().getServletContext().getRealPath( "\upload") + "\" + file.getFileName(); int index = filename.indexOf("."); String suffix = filename .substring(index + 1, filename.length()); // 如果是pdf文件就上传,while循环进行判断 while ("pdf".equals(suffix)) { // 将上传文件写入数据库 FileDao dao = new FileDao(); dao.add(filename, filepath); System.out.println(filename); // 将pdf转换为swf int i = filename.indexOf("."); String suffix2 = filename.substring(0, i); // String path=((ServletRequest) // getServlet()).getRealPath("/upload"); String path = getServlet().getServletContext().getRealPath( "\upload\swf"); System.out.println(suffix2); // String toolPath ="D:\test\pdf2spdfwf.exe"; String toolPath = getServlet().getServletContext() .getRealPath( "\" + "pdftool" + "\" + "pdf2swf.exe"); // String from = "D:\2.pdf"; String from = getServlet().getServletContext().getRealPath( "\upload") + "\" + filename; // String to = "D:\test\2.swf"; String to = path + "\" + suffix2 + ".swf"; int version = 9; StudyAction.convert(toolPath, from, to, version); break; } } catch (FileNotFoundException e) { // e.printStackTrace(); System.out.println("请上传文件"); } catch (IOException e) { e.printStackTrace(); } } return list(mapping, form, request, response); }
因为是带上传功能的,所以调用的方法里面有上传的功能,上传完后顺便进行转换。
希望前辈们指点迷津
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
还是那个样子,没出现什么东西
回复
想不出了,一样的命令一样的文件,结果不一样……。之前我用的时候没出现过这问题
嗯,还是非常感谢您。
把 Process getErrorStream 也输出来,说不定有提示
嗯,我按你说的方式都试过了,在CMD命令里面都可以转换,但是程序里面转换不了。
把转换不成功的文件拿出来在命令行试试, 指的是通过你的程序上传到服务器后的那个文件。