用swfTools转换PDF时有些文件转换不了,但是可以用CMD命令转换

水里游 发布于 2013/07/23 10:10
阅读 2K+
收藏 0

我用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下,\r\n这两个字符在一起时,表示一个换行。
				// 但如果这两个字符分开显示时,会换两次行。
				// 因此,屏蔽掉\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);
	}

因为是带上传功能的,所以调用的方法里面有上传的功能,上传完后顺便进行转换。

希望前辈们指点迷津

加载中
0
子木007
子木007
把转换不成功的文件拿出来在命令行试试, 指的是通过你的程序上传到服务器后的那个文件。
水里游
水里游
嗯,我按你说的方式都试过了,在CMD命令里面都可以转换,但是程序里面转换不了。
0
子木007
子木007
把 Process  getErrorStream 也输出来,说不定有提示
水里游
水里游
嗯,还是非常感谢您。
子木007
子木007
回复 @水里游 : 想不出了,一样的命令一样的文件,结果不一样……。之前我用的时候没出现过这问题
水里游
水里游
还是那个样子,没出现什么东西
返回顶部
顶部