コード例 #1
0
ファイル: pyDocx.py プロジェクト: YoannDqr/PyDocx
def gen_doc(graph_data, style, template=None, max_processes=os.cpu_count()+1):
    if template is None:
        doc = Document()
    else:
        doc = Document(template)

    composer = Composer(doc)
    workers = []
    progress = 0
    for i in range(len(graph_data)):
        process = multiprocessing.Process(target=task, args=(i, graph_data[i], style))
        workers.append(process)
        process.start()
        if i == max_processes:
            for elt in workers:
                elt.join()
                composer.append(Document('docx/tmp/part{}.docx'.format(progress)))
                progress += 1
            workers = []
    for elt in workers:
        elt.join()
        composer.append(Document('docx/tmp/part{}.docx'.format(progress)))
        progress += 1

    composer.save('docx/final.docx')
    print("Document generated in docx/final.docx.\n")
コード例 #2
0
ファイル: utils.py プロジェクト: zactodd/number_search
def merge_word_documents(indir,
                         outfile=search_book_name(),
                         add_page_break=True,
                         delete_merged_files=True):
    """
    Merge word documents.
    :param indir: THe directory where the documents are stored.
    :param outfile: THe outfile name of the word documents.
    :param add_page_break: flag for adding page breaks between documents.
    :param delete_merged_files: flag determining if the files merged files should be deleted.
    """
    files = [f"{indir}/{f}" for f in os.listdir(indir) if f.endswith(".docx")]
    first, *rest = files
    master = Document_compose(first)
    if add_page_break:
        master.add_page_break()
    composer = Composer(master)
    for i, f in enumerate(rest):
        tmp = Document_compose(f)
        if add_page_break and i < len(rest) - 1:
            tmp.add_page_break()
        composer.append(tmp)
    composer.save(f"{indir}/{outfile}")

    if delete_merged_files:
        for f in files:
            os.remove(f)
コード例 #3
0
def compose_wholepsa_for_member(parameters: dict):
    arbeitskleidung = docx.Document(ALL_DOCUMENTS["Arbeitskleidung"])
    find_and_replace(arbeitskleidung, parameters)
    arbeitskleidung.add_page_break()
    composed_master = Composer(arbeitskleidung)

    einsatzkleidung = docx.Document(ALL_DOCUMENTS["Einsatzkleidung"])
    find_and_replace(einsatzkleidung, parameters)
    einsatzkleidung.add_page_break()
    composed_master.append(einsatzkleidung)

    handschuhe = docx.Document(ALL_DOCUMENTS["Handschuhe"])
    find_and_replace(handschuhe, parameters)
    handschuhe.add_page_break()
    composed_master.append(handschuhe)

    helm = docx.Document(ALL_DOCUMENTS["Helm"])
    find_and_replace(helm, parameters)
    helm.add_page_break()
    composed_master.append(helm)

    kopfschutzhaube = docx.Document(ALL_DOCUMENTS["Kopfschutzhaube"])
    find_and_replace(kopfschutzhaube, parameters)
    kopfschutzhaube.add_page_break()
    composed_master.append(kopfschutzhaube)

    schuhe = docx.Document(ALL_DOCUMENTS["Schuhe"])
    find_and_replace(schuhe, parameters)
    composed_master.append(schuhe)

    composed_master.save(out_path)
    pass
コード例 #4
0
def make_master_file(docx_filepaths, filename, summ=True):
    '''
    for now, this takes in a list of filepaths, and creates two master files: one for summaries, and one for the articles

    it uses the above functions to:
    
        - create the summaries for the text in each individual article
        - formats headings and makes a table of contents for each file

    the input moving forward will likely be doc objects - files will be sent to an api endpoint, the api function will convert to docx objects, then sent to this
    this means we'll need to change this around a bit
    '''

    toc = Document()
    paragraph = toc.add_paragraph('TABLE OF CONTENTS')
    toc = make_toc(toc)
    article_list = [toc]

    for article in docx_filepaths:
        article_list.append(create_doc(article, summ))

    master = article_list[0]
    composer = Composer(master)
    for document in article_list[1:]:
        composer.append(document)

    composer.save(filename)

    update_toc(filename)
コード例 #5
0
def mergeDocuments(documents):
    if not documents:
        return
    composer = Composer(documents[0])
    for i in range(1, len(documents)):
        composer.append(documents[i])
    return composer
コード例 #6
0
ファイル: roadmap.py プロジェクト: vdsbenoit/baden
def _combine_docx(target_file, files):
    master = Document_compose(files[0])
    composer = Composer(master)
    for i in range(1, len(files)):
        doc_temp = Document_compose(files[i])
        composer.append(doc_temp)
    composer.save(target_file)
コード例 #7
0
ファイル: file_docx.py プロジェクト: plocket/docassemble
def concatenate_files(path_list):
    new_path_list = []
    for path in path_list:
        mimetype, encoding = mimetypes.guess_type(path)
        if mimetype in ('application/rtf', 'application/msword', 'application/vnd.oasis.opendocument.text'):
            new_docx_file = tempfile.NamedTemporaryFile(prefix="datemp", mode="wb", suffix=".docx", delete=False)
            if mimetype == 'application/rtf':
                ext = 'rtf'
            elif mimetype == 'application/msword':
                ext = 'doc'
            elif mimetype == 'application/vnd.oasis.opendocument.text':
                ext = 'odt'
            docassemble.base.pandoc.convert_file(path, new_docx_file.name, ext, 'docx')
            new_path_list.append(new_docx_file.name)
        elif mimetype == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
            new_path_list.append(path)
    if len(new_path_list) == 0:
        raise DAError("concatenate_files: no valid files to concatenate")
    if len(new_path_list) == 1:
        return new_path_list[0]
    composer = Composer(docx.Document(new_path_list[0]))
    for indexno in range(1, len(new_path_list)):
        composer.append(docx.Document(new_path_list[indexno]))
    docx_file = tempfile.NamedTemporaryFile(prefix="datemp", mode="wb", suffix=".docx", delete=False)
    composer.save(docx_file.name)
    return docx_file.name
コード例 #8
0
    def post(self):
        """
        Merge multiple docx documents into one
        """
        log.info("received a request to merge docx")
        contents = request.json['contents']
        if len(contents) < 2:
            return {"message": "contents must be at least 2 elements"}, 400

        tempFolder = generate_temp_folder()
        ext = '.docx'

        for i, content in enumerate(contents):
            base64_decode = base64.b64decode(content)
            fp = open(tempFolder + "/file" + str(i) + ext, "wb")
            fp.write(base64_decode)
            fp.close()

        for i in range(len(contents)):
            doc = Document(tempFolder + '/file' + str(i) + ext)
            if i == 0:
                composer = Composer(doc)
            else:
                composer.append(doc)

        output_file = tempFolder + '/final' + ext
        composer.save(output_file)
        return send_file(output_file, as_attachment=True)
コード例 #9
0
def mergeDoc(filename_master, files_list):
    number_of_sections = len(files_list)
    master = Document_compose()
    composer = Composer(master)
    for i in range(0, number_of_sections):
        doc_temp = Document_compose(files_list[i])
        composer.append(doc_temp)
    composer.save(filename_master)
コード例 #10
0
ファイル: command.py プロジェクト: uonxhou/docxcompose
def compose_files(parser, parsed_args):
    composer = Composer(Document(parsed_args.master))
    for slave_path in parsed_args.files:
        composer.append(Document(slave_path))

    composer.save(parsed_args.ouput_document)
    parser.exit(message='successfully composed file at {}\n'.format(
        parsed_args.ouput_document))
コード例 #11
0
def combine_all_docx(filename_master, files_list):
    number_of_sections = len(files_list)
    master = Document_compose(filename_master)
    composer = Composer(master)
    for i in range(0, number_of_sections):
        doc_temp = Document_compose(files_list[i])
        composer.append(doc_temp)
    composer.save("combined_file.docx")
コード例 #12
0
ファイル: __init__.py プロジェクト: stifi1993/DailyReport
def combine_report(docs_list, output_path):
    master = Document(docs_list[0])
    composer = Composer(master)
    if len(docs_list) > 1:
        for item_path in docs_list[1:]:
            doc = Document(item_path)
            composer.append(doc)
    composer.save(output_path)
コード例 #13
0
def merge_docs(first_doc, second_doc):
    if not first_doc:
        return second_doc
    if not second_doc:
        return first_doc
    composer = Composer(first_doc)
    composer.append(second_doc)
    return composer.doc
コード例 #14
0
ファイル: all_in_one.py プロジェクト: t0r1n88/Dodger
def combine_all_docx(filename_master, files_list):
    number_of_sections = len(files_list)
    master = Document_compose(filename_master)
    composer = Composer(master)
    for i in range(0, number_of_sections):
        doc_temp = Document_compose(files_list[i])
        composer.append(doc_temp)
    open('1.txt', 'w')
    composer.save("ALL_SERTIFICATES.docx")
コード例 #15
0
ファイル: export_docx.py プロジェクト: yellowsoar/Disfactory
def merge_documents(documents):
    for document in documents[:-1]:
        document.add_page_break()

    composer = Composer(documents[0])
    for document in documents[1:]:
        composer.append(document)

    return composer.doc
コード例 #16
0
ファイル: app.py プロジェクト: sbybfai/printAward
def composeDoc(composer, i, rows):
    new_doc = Document(TEMP_DOC)
    if (i < rows - 1):
        new_doc.add_page_break()
    if composer is None:
        composer = Composer(new_doc)
    else:
        composer.append(new_doc)
    return composer
コード例 #17
0
def combine_all_docx(filename_master, files_list):
    # Функция для объединения документов
    number_of_sections = len(files_list)
    master = Document_compose(filename_master)
    composer = Composer(master)
    for i in range(1, number_of_sections):
        doc_temp = Document_compose(files_list[i])
        composer.append(doc_temp)
    composer.save("Все сертификаты в одном файле.docx")
コード例 #18
0
def combine_resumes_and_other_stuff(resume_list):
    number_of_sections = len(resume_list)
    master = Document_compose(filename_master)
    composer = Composer(master)
    for i in range(0, number_of_sections):
        doc_temp = Document_compose(resume_list[i])
        composer.append(doc_temp)
    composer.append(Document_compose(last))
    composer.save(resume_master)
コード例 #19
0
def fusion2(word1, word2, dep):
    master = Document(word1)
    master.add_page_break()
    composer = Composer(master)
    doc1 = Document(word2)
    composer.append(doc1)
    name_fusion = "reports_word/Suivi_Territorial_plan_relance_{}.docx".format(
        dep)
    composer.save(name_fusion)
    return name_fusion
コード例 #20
0
ファイル: main.py プロジェクト: windmoon-Lotus/nessus-report
def mergeDocx_pyDocx(destFileName, file_list):
    number = len(file_list)
    master = Document(file_list[0])

    docx_composer = Composer(master)

    for x in range(1, number):
        docx_tmp = Document(file_list[x])
        docx_composer.append(docx_tmp)
    docx_composer.save(destFileName)
コード例 #21
0
 def combine_word_documents(cls,word_files, ds_name):
     merged_document = Document(EMPTY_DOC_PATH)
     composer = Composer(merged_document)
     for file in word_files:
         doc_temp = Document(file)
         composer.append(doc_temp)
     try:
         composer.save(os.path.join(os.path.dirname(word_files[0]),f'{ds_name}.docx'))
     except PermissionError as e:
         print(str(e))
コード例 #22
0
def compose_doc(created, copy, pages):
    doc_main = Document()
    doc_main.save("temporary_main.docx")
    master = Document("temporary_main.docx")
    composer = Composer(master)
    doc = Document(copy)
    for i in range(pages):
        composer.append(doc)
    composer.save(created)
    remove("temporary_main.docx")
    remove("temporary_copy.docx")
コード例 #23
0
ファイル: main_2.py プロジェクト: Roby1kenoby/docx-append
def append():
    masterDoc = Document(documents[0]["path"])
    masterDoc.add_page_break()
    composer = Composer(masterDoc)
    for doc in range(1, len(documents)):
        docu = Document(documents[doc]["path"])
        docu.add_page_break()
        composer.append(docu)
        doc += 1
    composer.save(os.path.join(path, "combined.docx"))
    messagebox.showinfo("POTEITOES!", "Ho finito!")
コード例 #24
0
def combine_all_env(filename_master,files_list):

    savepath = os.getcwd() + "\\print\\" + name + "_combined_envelope.docx"
    number_of_sections=len(files_list)
    master = Document_compose(filename_master)
    composer = Composer(master)
    for i in range(0, number_of_sections):
        if os.path.isfile(files_list[i]) == True:
            doc_temp = Document_compose(files_list[i])
            composer.append(doc_temp)
    composer.save(savepath)
コード例 #25
0
ファイル: assembler.py プロジェクト: A-G-D/docx-assembler
def assemble_documents(files, output_doc, output_pdf):
    merger = Composer(Document())

    for file in files:
        merger.append(Document(file), False)
        paragraph_count = len(merger.doc.paragraphs)
        if paragraph_count > 0:
            _delete_paragraph(merger.doc.paragraphs[paragraph_count - 1])

    merger.save(output_doc)
    if output_pdf != None and output_pdf != '' and not output_pdf.isspace():
        _docx_to_pdf(output_doc, output_pdf)
コード例 #26
0
def combine_all_docx(filename_master, files_list, output):
    print('Merging: %s' % filename_master)
    number_of_sections = len(files_list)
    master = Document_compose(filename_master)
    composer = Composer(master)
    for i in range(0, number_of_sections):
        doc_temp = Document_compose(files_list[i])
        composer.append(doc_temp)
        print('Merging: %s' % (files_list[i]))
    composer.save(output)
    hr('OUTPUT:')
    print('Output file: %s' % output)
コード例 #27
0
ファイル: builder.py プロジェクト: Mortdecai/ME-Project
def merge_documents(files, output_doc, output_pdf):
    merger = Composer(Document())

    for file in files:
        merger.append(Document(file), False)
        paragraph_count = len(merger.doc.paragraphs)
        if paragraph_count > 0:
            delete_paragraph(merger.doc.paragraphs[paragraph_count - 1])

    merger.save(output_doc)
    if not output_pdf is None:
        docx_to_pdf(output_doc, output_pdf)
コード例 #28
0
ファイル: 3_proj_.py プロジェクト: xingag/test_auto
    def compose_files(self, files, output_file_path):
        """
        合并多个word文件到一个文件中
        :param files:
        :return:
        """
        composer = Composer(Document())
        for file in files:
            composer.append(Document(file))

        # 保存到新的文件中
        composer.save(output_file_path)
コード例 #29
0
def combine_all_docx(filename_master, files_list):
    from datetime import datetime

    number_of_sections = len(files_list)
    master = Document(filename_master)
    composer = Composer(master)
    for i in range(0, number_of_sections):
        doc_temp = Document(files_list[i])
        composer.append(doc_temp)
    now = datetime.now().strftime("%Y%m%d-%H%M%S")
    outputfile = os.path.join(r"..", f"mats_{now}.docx")
    composer.save(outputfile)
    print(outputfile)
コード例 #30
0
def compose_single_equipment(parameters: dict):
    doc = docx.Document(ALL_DOCUMENTS["BaseEquipment"])
    find_and_replace(doc, parameters)

    checkRow = ["test_date", "remark", "testVision", "testFunction", "tester"]
    if len(parameters["checks"]) <= 9:
        find_and_replace(doc, {"pagenumber": "1"})
        parameterChecks: dict = {}
        for iterChecks in range(1, 10):
            for check, iter in zip(checkRow, range(0, 5)):
                try:
                    parameterChecks[check +
                                    str(iterChecks)] = parameters["checks"][
                                        iterChecks - 1][iter]
                except IndexError:
                    parameterChecks[check + str(iterChecks)] = ""
        find_and_replace(doc, parameterChecks)
        composed_master = Composer(doc)
    else:
        find_and_replace(doc, {"pagenumber": str(1)})
        parameterChecks: dict = {}
        for iterChecks in range(1, 10):
            for check, iter in zip(checkRow, range(0, 5)):
                try:
                    parameterChecks[check +
                                    str(iterChecks)] = parameters["checks"][(
                                        (1 - 1) * 9) + (iterChecks - 1)][iter]
                except IndexError:
                    parameterChecks[check + str(iterChecks)] = ""
        find_and_replace(doc, parameterChecks)
        composed_master = Composer(doc)

        for iterPages in range(2,
                               math.ceil(len(parameters["checks"]) / 9) + 1):
            doc = docx.Document(ALL_DOCUMENTS["BaseEquipment"])
            find_and_replace(doc, parameters)
            find_and_replace(doc, {"pagenumber": str(iterPages)})
            parameterChecks: dict = {}
            for iterChecks in range(1, 10):
                for check, iter in zip(checkRow, range(0, 5)):
                    try:
                        parameterChecks[
                            check + str(iterChecks)] = parameters["checks"][(
                                (iterPages - 1) * 9) + (iterChecks - 1)][iter]
                    except IndexError:
                        parameterChecks[check + str(iterChecks)] = ""
            find_and_replace(doc, parameterChecks)
            composed_master.append(doc)

    composed_master.save(out_path)
    return composed_master
コード例 #31
0
ファイル: mergetool.py プロジェクト: 4teamwork/opengever.core
class DocxMergeTool(object):
    """The docx merge tool merges docx documents with the docxcompose composer.
    The merge is based on a master document, if remove_property_fields is False
    the master's doc-properties will be preserved.

    It is used as a context manager and accepts bytes of documents.
    Calling the DocxMergeTool object merges the documents and returns the resulting
    bytes.

    The files are merged in the order they were added or inserted as as
    specified by inserts index.
    """

    def __init__(self, master, remove_property_fields=True):
        self._remove_property_fields = remove_property_fields
        self._master = master

    def __enter__(self):
        self._tempdir_path = Path(tempfile.mkdtemp(prefix='opengever.core.doxcmerge_'))
        self._index = 0
        self._composer = Composer(self._as_document(self._master))

        return self

    def __exit__(self, exc_type, exc_value, tb):
        self._tempdir_path.rmtree_p()

    def __call__(self):
        """Merge the registered docx files and return the resulting bytes.
        """
        result_path = self._tempdir_path.joinpath('result.docx')
        self._composer.save(result_path)
        return result_path.bytes()

    def add(self, file_data):
        self._composer.append(
            self._as_document(file_data),
            remove_property_fields=self._remove_property_fields)

    def insert(self, index, file_data):
        self._composer.insert(
            index, self._as_document(file_data),
            remove_property_fields=self._remove_property_fields)

    def _as_document(self, file_data):
        """Convert bytes to a document.

        Also make sure property field value are up to date before they are
        removed.
        """
        path = self._get_next_path()
        path.write_bytes(file_data)
        document = Document(path)

        if self._remove_property_fields:
            CustomProperties(document).update_all()

        return document

    def _get_next_path(self):
        path = self._tempdir_path.joinpath('{0}.docx'.format(self._index))
        self._index += 1
        return path