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

发布于 2021-11-21 21:51:32 字数 3678 浏览 765 评论 6

我用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

勿忘初心 2021-11-25 05:29:54

还是那个样子,没出现什么东西

惜醉颜 2021-11-25 05:16:10

回复
想不出了,一样的命令一样的文件,结果不一样……。之前我用的时候没出现过这问题

猫九 2021-11-25 05:13:30

嗯,还是非常感谢您。

做个少女永远怀春 2021-11-24 20:15:45

把 Process  getErrorStream 也输出来,说不定有提示

柳若烟 2021-11-24 13:45:51

嗯,我按你说的方式都试过了,在CMD命令里面都可以转换,但是程序里面转换不了。

深巷少女 2021-11-22 19:01:21

把转换不成功的文件拿出来在命令行试试, 指的是通过你的程序上传到服务器后的那个文件。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文