2012-07-05 39 views
7

Ứng dụng .Net của tôi cần chuyển đổi tài liệu PDF sang định dạng Word theo lập trình.Làm thế nào để chuyển đổi PDF sang Word bằng Acrobat SDK?

Tôi đã đánh giá một số sản phẩm và tìm thấy Acrobat X Pro, cho phép lưu dưới dạng tùy chọn nơi chúng tôi có thể lưu tài liệu ở định dạng Word/Excel. Tôi đã cố gắng sử dụng Acrobat SDK nhưng không thể tìm thấy tài liệu thích hợp từ nơi bắt đầu.

Tôi đã xem mẫu IAC của họ nhưng không thể hiểu cách gọi mục menu và làm cho nó thực thi tùy chọn lưu dưới dạng.

Trả lời

0

Adobe không hỗ trợ chuyển đổi PDF sang Word, trừ khi bạn đang sử dụng ứng dụng Acrobat PDF của họ. Maeaning bạn không thể làm điều đó với SDK của họ cũng không bằng cách gọi một dòng lệnh. Bạn chỉ có thể thực hiện thủ công.

+0

Các giải pháp được đăng bởi một trong hai jle hoặc tôi chỉ cho cách để đạt được điều này lập trình. Nếu bạn có Acrobat X Pro, bạn có thể thử kịch bản của tôi vì nó sẽ làm việc ra khỏi hộp khi bạn đã cài đặt WinPython x64 2.7.6.3 (miễn phí) – Subhobroto

13

Bạn có thể thực hiện việc này với Acrobat X Pro, nhưng bạn cần sử dụng API javascript trong C#.

AcroPDDoc pdfd = new AcroPDDoc(); 
pdfd.Open(sourceDoc.FileFullPath); 
Object jsObj = pdfd.GetJSObject(); 
Type jsType = pdfd.GetType(); 
//have to use acrobat javascript api because, acrobat 
object[] saveAsParam = { "newFile.doc", "com.adobe.acrobat.doc", "", false, false }; 
jsType.InvokeMember("saveAs",BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance,null, jsObj, saveAsParam, CultureInfo.InvariantCulture); 

Hy vọng điều đó sẽ hữu ích.

+0

Xin chào, tôi không có điều tương tự .. cảm ơn bạn đã câu trả lời. nhưng có vẻ như quá trình mất khá nhiều thời gian để hoàn thành. Nếu tôi phải bao gồm 1000 tập tin, nó sẽ mất hơn 5 6 giờ .. là có một cách nhanh hơn cho điều này? –

+0

Tôi đã thêm một pdfd.Close() ở cuối để mở khóa tệp. – r03

1

Tôi đã làm điều gì đó rất giống với WinPython x64 2.7.6.3 và Acrobat X Pro và sử dụng giao diện JSObject để chuyển đổi PDF sang DOCX. Về cơ bản, giải pháp giống như jle's.

Sau đây phải là một mảnh đầy đủ các mã có thể chuyển đổi một tập hợp các file PDF sang DOCX:

# gets all files under ROOT_INPUT_PATH with FILE_EXTENSION and tries to extract text from them into ROOT_OUTPUT_PATH with same filename as the input file but with INPUT_FILE_EXTENSION replaced by OUTPUT_FILE_EXTENSION 
from win32com.client import Dispatch 
from win32com.client.dynamic import ERRORS_BAD_CONTEXT 

import winerror 

# try importing scandir and if found, use it as it's a few magnitudes of an order faster than stock os.walk 
try: 
    from scandir import walk 
except ImportError: 
    from os import walk 

import fnmatch 

import sys 
import os 

ROOT_INPUT_PATH = None 
ROOT_OUTPUT_PATH = None 
INPUT_FILE_EXTENSION = "*.pdf" 
OUTPUT_FILE_EXTENSION = ".docx" 

def acrobat_extract_text(f_path, f_path_out, f_basename, f_ext): 
    avDoc = Dispatch("AcroExch.AVDoc") # Connect to Adobe Acrobat 

    # Open the input file (as a pdf) 
    ret = avDoc.Open(f_path, f_path) 
    assert(ret) # FIXME: Documentation says "-1 if the file was opened successfully, 0 otherwise", but this is a bool in practise? 

    pdDoc = avDoc.GetPDDoc() 

    dst = os.path.join(f_path_out, ''.join((f_basename, f_ext))) 

    # Adobe documentation says "For that reason, you must rely on the documentation to know what functionality is available through the JSObject interface. For details, see the JavaScript for Acrobat API Reference" 
    jsObject = pdDoc.GetJSObject() 

    # Here you can save as many other types by using, for instance: "com.adobe.acrobat.xml" 
    jsObject.SaveAs(dst, "com.adobe.acrobat.docx") # NOTE: If you want to save the file as a .doc, use "com.adobe.acrobat.doc" 

    pdDoc.Close() 
    avDoc.Close(True) # We want this to close Acrobat, as otherwise Acrobat is going to refuse processing any further files after a certain threshold of open files are reached (for example 50 PDFs) 
    del pdDoc 

if __name__ == "__main__": 
    assert(5 == len(sys.argv)), sys.argv # <script name>, <script_file_input_path>, <script_file_input_extension>, <script_file_output_path>, <script_file_output_extension> 

    #$ python get.docx.from.multiple.pdf.py 'C:\input' '*.pdf' 'C:\output' '.docx' # NOTE: If you want to save the file as a .doc, use '.doc' instead of '.docx' here and ensure you use "com.adobe.acrobat.doc" in the jsObject.SaveAs call 

    ROOT_INPUT_PATH = sys.argv[1] 
    INPUT_FILE_EXTENSION = sys.argv[2] 
    ROOT_OUTPUT_PATH = sys.argv[3] 
    OUTPUT_FILE_EXTENSION = sys.argv[4] 

    # tuples are of schema (path_to_file, filename) 
    matching_files = ((os.path.join(_root, filename), os.path.splitext(filename)[0]) for _root, _dirs, _files in walk(ROOT_INPUT_PATH) for filename in fnmatch.filter(_files, INPUT_FILE_EXTENSION)) 

    # patch ERRORS_BAD_CONTEXT as per https://mail.python.org/pipermail/python-win32/2002-March/000265.html 
    global ERRORS_BAD_CONTEXT 
    ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL) 

    for filename_with_path, filename_without_extension in matching_files: 
     print "Processing '{}'".format(filename_without_extension) 
     acrobat_extract_text(filename_with_path, ROOT_OUTPUT_PATH, filename_without_extension, OUTPUT_FILE_EXTENSION) 
Các vấn đề liên quan