Вопрос по acrobat-sdk, pdf, ms-word – Как конвертировать PDF в Word, используя Acrobat SDK? [закрыто]

6

Мое приложение .Net должно преобразовывать документ PDF в формат Word программным способом.

Я оценил несколько продуктов и нашелAcrobat X Pro, который дает возможность сохранить как, где мы можем сохранить документ в формате Word / Excel. Я пытался использовать Acrobat SDK, но не смог найти нужную документацию с чего начать.

Я изучил их пример IAC, но не мог понять, как вызвать пункт меню и заставить его выполнить опцию сохранения как.

Ваш Ответ

3   ответа
14

Вы можете сделать это с помощью Acrobat X Pro, но вам нужно использовать API javascript в 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);

Надеюсь, это поможет.

Я добавил pdfd.Close () в конце, чтобы разблокировать файл.
Спасибо за это! Так полезно. Для тех, кто заинтересован в экспорте в Excel, просто измените newFile.doc на newFile.xlsx и & quot; com.adobe.acrobat.doc & quot; на "com.adobe.acrobat.xlsx"
Привет, я не то же самое .. спасибо за ваш ответ. но кажется, что процесс занимает довольно много времени, чтобы закончить. Если мне нужно покрыть 1000 файлов, это займет более 5 6 часов ... есть ли более быстрый способ для этого?
0

Adobe не поддерживает преобразования PDF в Word, если вы не используете их клиент Acrobat PDF. Таким образом, вы не можете сделать это ни с помощью SDK, ни из командной строки. Вы можете сделать это только вручную.

Решения, опубликованные jle или me, показывают способы достижения этого программным путем. Если у вас есть Acrobat X Pro, вы можете попробовать мой скрипт, так как он должен работать сразу после установки WinPython x64 2.7.6.3 (это бесплатно)
2

Я сделал нечто очень похожее, используя WinPython x64 2.7.6.3 и Acrobat X Pro, и использовал интерфейс JSObject для преобразования PDF-файлов в DOCX. По сути то же решение, что иJLE & APOS; s.

Следующее должно быть полным фрагментом кода, который преобразует набор PDF-файлов в 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)
Что будет альтернативой диспетчерскому модулю на Mac?

Похожие вопросы