精华内容
下载资源
问答
  • 苹果电脑的pages文档想要变成word格式该如何转换我们可以在苹果电脑上将pages文档转换为Word格式,那么如何转换呢?小编就来为大家介绍一下吧。具体如下:1. 第一步,打开pages,接着该软件中打开想要转换为Word的...

    苹果电脑的pages文档想要变成word格式该如何转换

    我们可以在苹果电脑上将pages文档转换为Word格式,那么如何转换呢?小编就来为大家介绍一下吧。

    具体如下:

    1. 第一步,打开pages,接着该软件中打开想要转换为Word的文档。

    12c48dd1547667034dccd30ecb348bae.png

    2. 第二步,打开文档后,我们会看到如下图所示的页面,点击箭头所指的【文件】选项。

    dcea671429daa90bf818cb9aaac7d2b0.png

    3. 第三步,在文件的下拉选项中,点击【导出到】右边的箭头。

    43a8bb30e271a9ed7fb7339d6daa71ba.png

    4. 第四步,在导出到右边的弹出选项框中选择【Word】选项。

    089572f8f3ea7199b80f068dc9289482.png

    5. 第五步,我们会看到如下图所示的提示框,点击箭头所指的“下一步”选项。

    ff63765b501e3f2e5ada3c679aa2511d.png

    6. 第六步,选择需要存储的目录,接着点击“导出”选项。

    40a0e15581096722454e3634409d26ac.png

    7. 第七步,我们只需要等待创建Word文件成功即可。

    e327efbed40b3cbbb1f4093d781fe91b.png

    以上就是苹果电脑的pages文档想要变成word格式该如何转换的方法。

    时间:2019-05-19 17:24 / 作者:百科全说

    5a63401d8fa2306cf372be578c407841.gif

    随着科技的发展,电脑已经成为人们日常生活中必不可少的工具,当我们在使用苹果电脑时,由于其与Windows系统不一致,所以有些人就不知道如何处理,接下来就由小编来告诉大家如何在macbook内转换文档的格式.具体如下:1. 第一步,打开电脑后,点击左侧的启动台,然后选择wps office图标,点击打开.2. 第二步,进入应用主页后,点击左侧的pdf转word图标,然后点击转换页面中的+号.3. 第三步,点击右上角的搜索框,输入pdf并点击搜索,然后在搜索结果中选择要进行转换的pdf文档.4. 第

    5a63401d8fa2306cf372be578c407841.gif

    [原因分析] 这个需要根据下载资源的情况来进行判断,可能是资源是存在网盘.邮箱.需要登录才能下载的论坛等地方的资源,所以其实下载下来的内容和格式都不是想要的. 例如:百度文库,就有加密处理,所以迅雷7下载下来都不是想要的文件.

    5a63401d8fa2306cf372be578c407841.gif

    Mac电脑提取Pages文档图片方法 为了从Pages中提取图片,我们需要用到万能的Preview(预览). 1.首先,在Pages文档中选中你想要保存的图片 2.然后用Command+c复制(或者从编辑菜单中选择复制) 3.再然后在Preview里面的文件菜单中选择"从剪贴板新建"(New from clipboard) 4.最后在Preview里面的文件菜单中选择"另存为"(Save As...)保存成你想要的格式就行啦

    5a63401d8fa2306cf372be578c407841.gif

    前些时间PC6苹果网小编从网上看到有网友询问在Mac上查看Pages文档时如何文档中的图片保存到本地,下面PC6小编特地制作了一份相关的教程,希望能帮到大家: 为了从Pages中提取图片,我们需要用到万能的Preview(预览). 1.首先,在Pages文档中选中你想要保存的图片 2.然后用Command+c复制(或者从编辑菜单中选择复制) 3.再然后在Preview里面的文件菜单中选择"从剪贴板新建"(New from clipboard) 4.最后在Preview里面的文件菜单中选

    为了从Pages中提取图片,我们需要用到万能的Preview。 首先,在Pages文档中选中你想要保存的图片 然后用cmd+c复制(或者从编辑菜单中选择复制) 再然后在Preview里面的文件菜单中选择“从剪贴板新建”(New from clipboard) 最后在Preview里面的文件菜单中选择“另存为”(Save As...)保存成你想要的格式就行啦

    5a63401d8fa2306cf372be578c407841.gif

    许多小伙伴在使用launchpad的时候,需要对pages文档进行加密操作,那么我们应该如何操作呢?今天,小编就教大家对pages文档进行加密.具体如下:1. 首先在我们的电脑上打开launchpad,如图.2. 打开pages,然后新建一个文档,如图.3.在上方的工具栏中点击[文件],如图.4. 之后进行密码设置的操作,设置自己记得住的密码,如图.5. 之后存储这个新的文档,如图.6. 之后我们再去打开这个文档,就需要密码才可以查看了,如图.以上就是小编教大家对pages文档进行加密的方法,希

    5a63401d8fa2306cf372be578c407841.gif

    Word的发展也变得迅速,我们不仅可以在Excel2019中插入图,在Word2019中插入图表,那么小编就为大家介绍一下如何在word2019文档中插入雷达图的图表.具体如下:1. 第一步,打开电脑版word2019,点击顶部菜单栏中的"插入"选项.2.第二步,点击"插入"选项后我们在下面工具栏中找到"图表"选项并点击.3. 第三步,点击"图标"选项后,我们就可以看到如下图所示的页面,点击插入图表中左侧栏中的雷达图.4. 第

    5a63401d8fa2306cf372be578c407841.gif

    当我们在使用电脑的时候,一般都会用到word软件来处理文档,而在文档内,如果想要设置所有字母的设置的话,应如何操作呢?接下来就由小编来到告诉大家.具体如下:1. 第一步,打开电脑中的word软件,然后新建一个空白文档.2. 第二步,在新建的空白文档内,录入一些内容,包含汉字和英文.3. 第三步,文字录入完成后,通过快捷键ctrl+h,打开查找和替换窗口.4. 第四步,点击窗口左下角的更多选项.5. 第五步,点击查找内容选项,将光标置于其中后,再点击下方的特殊格式选项,点击弹出菜单中的任意字母选项

    5a63401d8fa2306cf372be578c407841.gif

    我们在进行文档编辑的时候,有时会遇到需要进行中英文互译的情况,今天就跟大家介绍一下电脑中的文档怎么进行中英文的翻译的具体操作步骤.1. 第一种:借助有道翻译工具,如图,我们在百度中进行搜索,然后打开有道文档翻译页面,将想要翻译的文档上传进行翻译即可.2. 还可以选择在有道的线上翻译器中,选择上传需要翻译的文件.3. 第二种:借助doctranslator在线的文档翻译工具,同样通过百度搜索打开翻译工具,然后上传文件进行翻译即可:4. 第三种:借助网易见外工作台的文档翻译功能,在百度中,找到官网打

    展开全文
  • 如何将word文档转换为图片

    千次阅读 2020-12-04 23:01:12
    网上逛了一圈,对于docx直接图片这种转换没有什么有效的信息,不过结合获取的信息,笔者倒是想了一个曲线救国的法子,docx->pdf, pdf->image,通过两步可以最终实现该转换。一、环境准备首先进行环境准备...

    前段时间换工作,在BOSS直聘上看到一个有意思的功能,上传docx格式的简历,能够以图片的形式在线预览,并且图片还添加了水印,笔者对此比较感兴趣,就摸索着实现方法。网上逛了一圈,对于docx直接转图片这种转换没有什么有效的信息,不过结合获取的信息,笔者倒是想了一个曲线救国的法子,docx->pdf, pdf->image,通过两步可以最终实现该转换。

    一、环境准备

    首先进行环境准备工作,把需要用到的工具都安装配置好:

    1、安装pandoc

    Pandoc是由John MacFarlane开发的标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的“瑞士军刀”。该工具使用Haskell语言编写,以命令行形式实现与用户的交互,可支持多种操作系统。简而言之,pandoc就是一款转换工具,可以把格式A的文档转换为格式B的文档,就本文的目标来讲,主要用它实现了docx->pdf的转换。

    根据系统类别选择对应的安装包,安装完成后将其安装目录添加到系统路径中,windows版本的安装完成后会自动添加,不用额外设置。

    2、安装miktex

    MikTex是一款基于Tex的排版引擎。TeX 在不同的硬件和操作系统上有不同的实现版本。这就像C语言,在不同的操作系统中有不同的编译系统,例如Linux 下的gcc,Windows 下的Visual C++ 等。有时,一种操作系统里也会有好几种的TeX系统。目前常见的Unix/Linux 下的TeX系统是Texlive,Windows 下则有MiKTeX和fpTeX。CTeX指的是CTeX中文套装的简称,是把MiKTeX和一些常用的相关工具,如GSview,WinEdt 等包装在一起制作的一个简易安装程序,并对其中的中文支持部分进行了配置,使得安装后马上就可以使用中文。

    该排版工具是docx->pdf转换时不可获取的,否则无法实现转换。

    下载地址:https://miktex.org/   根据系统类别选择合适的版本,安装完成后将安装目录添加到系统路径。

    3、安装poppler

    代码实现中引用了一个开源库pdf2image,而这个库又引用了poppler,所以需要安装该环境。Poppler是一个基于xpdf-3.0的用于操作pdf的库,其中poppler-utils是建立在Poppler的库API上的工具集合,用于管理PDF和提取内容,主要工具如下:

    pdfdetach – 从PDF中提取嵌入式文档;

    pdffonts – 列出PDF中使用的字体;

    pdfimages – 从PDF中以原始分辨率提取所有嵌入式图像;

    pdfinfo – 列出PDF的所有信息;

    pdfseparate – 从PDF中提取单个页面;

    pdftocairo – 使用cairo将单页从PDF转换为矢量或位图格式;

    pdftohtml – 将PDF转换为HTML格式的保留格式;

    pdftoppm – 将PDF页面转换为位图;

    pdftops – 将PDF转换为可打印的PS格式;

    pdftotext – 从PDF中提取所有文本;

    pdfunite – 合并几个PDF。

    pdf2image使用了pdftoppm和pdfinfo这两个工具,用来将pdf转换为图片和获取pdf的文档页数,代码稍后会列出。

    下载地址:https://github.com/Belval/pdf2image  根据系统类别选择对应的版本,安装完成后将安装目录下的bin目录添加到系统路径。

    4、字体下载

    用来生成水印时使用,笔者下载的是SimSun宋体,下载地址:https://www.fontke.com/font/10132367/download/,也可以下载其他字体,看个人选择。

    完成上边四步环境就配置好了,笔者的电脑是Windows10,当然以上工具同样支持linux和mac环境,每个工具的官档都标注了支持的系统版本。环境配置好后接下来就是coding环节了,通过程序来实现转换过程的自动化调用,笔者会列出代码的目录结构,并依次说明其用途。

    二、代码实现

    关于实现这部分,笔者使用的开发语言是python36,以下为目录结构:

    1、font目录

    该目录存放的是下载好的字体文件,供代码中引用。

    2、pdf目录

    该目录存放转换之后的pdf文件。

    3、target目录

    该目录存放最终转换后的图片,图片为以时间戳命名的png图片,格式可以指定。

    4、config.py

    配置文件,存放了目录、图片大小、水印等配置,代码如下:

    Python

    import os

    # 根目录

    BASE_DIR = os.path.dirname(__file__)

    # pdf默认输出路径

    DEFAULT_OUTPUT_DIR = os.path.join(BASE_DIR, 'pdf')

    # 最终生成的图片存放在此目录

    TARGET_DIR = os.path.join(BASE_DIR, 'target')

    # 水印字体

    FONT_FILE = os.path.join(BASE_DIR, "font/simsun.ttf")

    # 单张图片的宽高,PIL支持图片的最大宽度1700

    IMAGE_WIDTH = 1700

    IMAGE_HEIGHT = 2200

    # 水印位置-left和top

    WATERMARK_LEFT = 0

    WATERMARK_TOP = 1800

    # 水印图片背景色-白色透明,最后一位表示透明度0~255,0为透明

    BACKGROUND_COLOR = (255, 255, 255, 0)

    #水印字体颜色-红色 60透明度

    FONT_COLOR = (255, 0, 0, 60)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    importos

    # 根目录

    BASE_DIR=os.path.dirname(__file__)

    # pdf默认输出路径

    DEFAULT_OUTPUT_DIR=os.path.join(BASE_DIR,'pdf')

    # 最终生成的图片存放在此目录

    TARGET_DIR=os.path.join(BASE_DIR,'target')

    # 水印字体

    FONT_FILE=os.path.join(BASE_DIR,"font/simsun.ttf")

    # 单张图片的宽高,PIL支持图片的最大宽度1700

    IMAGE_WIDTH=1700

    IMAGE_HEIGHT=2200

    # 水印位置-left和top

    WATERMARK_LEFT=0

    WATERMARK_TOP=1800

    # 水印图片背景色-白色透明,最后一位表示透明度0~255,0为透明

    BACKGROUND_COLOR=(255,255,255,0)

    #水印字体颜色-红色 60透明度

    FONT_COLOR=(255,0,0,60)

    5、doc2pdf.py

    该模块封装了pandoc命令行工具的调用,实现了docx文档到pdf的转换过程

    Python

    import os

    import uuid

    from subprocess import Popen, PIPE

    def _load_doc(doc):

    doc = str(doc)

    if not os.path.exists(doc):

    raise FileNotFoundError("file {} not found".format(doc))

    _, doc_name = os.path.split(doc)

    if not doc_name.endswith('.docx'):

    raise TypeError("Only support word doc with suffix '.docx'")

    return doc

    def _build_command(doc_path, output_dir, pdf_name=None, pdf_engine=None):

    args = ['pandoc', '--pdf-engine=xelatex']

    # args = ['pandoc', '--pdf-engine=lualatex']

    if pdf_engine is not None:

    # MikTex包含了两种pandoc支持的Tex

    if pdf_engine not in ("xelatex", "lualatex"):

    raise ValueError("not supported pdf-engine: {}".format(pdf_engine))

    else:

    args[1] = '--pdf-engine={}'.format(pdf_engine)

    if pdf_name is None:

    pdf_name = str(uuid.uuid4()) + '.pdf'

    if not os.path.isdir(output_dir):

    raise NotADirectoryError("{} is not a existed directory".format(output_dir))

    pdf_path = os.path.join(output_dir, pdf_name)

    args.append('-o')

    args.append(pdf_path)

    args.append(doc_path)

    # 设置字体避免中文乱码无法输出问题,SimSun是宋体, MicrosoftYaHei是微软雅黑

    args.append('-V')

    args.append('mainfont="MicrosoftYaHei"')

    # args.append('-V')

    # args.append('margin-left=0in')

    return args, pdf_path

    def doc2pdf(source, pdf_path):

    doc_path = _load_doc(source)

    cmd, output_pdf = _build_command(doc_path, pdf_path)

    # run cmd

    print("doc to pdf, converting...")

    Popen(cmd, stderr=PIPE, stdout=PIPE).communicate()

    print("job done!")

    return output_pdf

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    importos

    importuuid

    fromsubprocessimportPopen,PIPE

    def_load_doc(doc):

    doc=str(doc)

    ifnotos.path.exists(doc):

    raiseFileNotFoundError("file {} not found".format(doc))

    _,doc_name=os.path.split(doc)

    ifnotdoc_name.endswith('.docx'):

    raiseTypeError("Only support word doc with suffix '.docx'")

    returndoc

    def_build_command(doc_path,output_dir,pdf_name=None,pdf_engine=None):

    args=['pandoc','--pdf-engine=xelatex']

    # args = ['pandoc', '--pdf-engine=lualatex']

    ifpdf_engineisnotNone:

    # MikTex包含了两种pandoc支持的Tex

    ifpdf_enginenotin("xelatex","lualatex"):

    raiseValueError("not supported pdf-engine: {}".format(pdf_engine))

    else:

    args[1]='--pdf-engine={}'.format(pdf_engine)

    ifpdf_nameisNone:

    pdf_name=str(uuid.uuid4())+'.pdf'

    ifnotos.path.isdir(output_dir):

    raiseNotADirectoryError("{} is not a existed directory".format(output_dir))

    pdf_path=os.path.join(output_dir,pdf_name)

    args.append('-o')

    args.append(pdf_path)

    args.append(doc_path)

    # 设置字体避免中文乱码无法输出问题,SimSun是宋体, MicrosoftYaHei是微软雅黑

    args.append('-V')

    args.append('mainfont="MicrosoftYaHei"')

    # args.append('-V')

    # args.append('margin-left=0in')

    returnargs,pdf_path

    defdoc2pdf(source,pdf_path):

    doc_path=_load_doc(source)

    cmd,output_pdf=_build_command(doc_path,pdf_path)

    # run cmd

    print("doc to pdf, converting...")

    Popen(cmd,stderr=PIPE,stdout=PIPE).communicate()

    print("job done!")

    returnoutput_pdf

    6、pdf2image.py

    一个开源的python库,只包含了一个文件,笔者直接复制过来使用的。主要封装了poppler的命令行调用,实现pdf到图片的转换。

    Python

    """

    pdf2image is a light wrapper for the poppler-utils tools that can convert your

    PDFs into Pillow images.

    """

    import os

    import re

    import tempfile

    import uuid

    from io import BytesIO

    from subprocess import Popen, PIPE

    from PIL import Image

    def convert_from_path(pdf_path, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', thread_count=1, userpw=None):

    """

    Description: Convert PDF to Image will throw whenever one of the condition is reached

    Parameters:

    pdf_path -> Path to the PDF that you want to convert

    dpi -> Image quality in DPI (default 200)

    output_folder -> Write the resulting images to a folder (instead of directly in memory)

    first_page -> First page to process

    last_page -> Last page to process before stopping

    fmt -> Output image format

    thread_count -> How many threads we are allowed to spawn for processing

    userpw -> PDF's password

    """

    page_count = __page_count(pdf_path, userpw)

    if thread_count < 1:

    thread_count = 1

    if first_page is None:

    first_page = 1

    if last_page is None or last_page > page_count:

    last_page = page_count

    # Recalculate page count based on first and last page

    page_count = last_page - first_page + 1

    if thread_count > page_count:

    thread_count = page_count

    reminder = page_count % thread_count

    current_page = first_page

    processes = []

    for _ in range(thread_count):

    # A unique identifier for our files if the directory is not empty

    uid = str(uuid.uuid4())

    # Get the number of pages the thread will be processing

    thread_page_count = page_count // thread_count + int(reminder > 0)

    # Build the command accordingly

    args, parse_buffer_func = __build_command(['pdftoppm', '-r', str(dpi), pdf_path], output_folder, current_page, current_page + thread_page_count - 1, fmt, uid, userpw)

    # Update page values

    current_page = current_page + thread_page_count

    reminder -= int(reminder > 0)

    # Spawn the process and save its uuid

    processes.append((uid, Popen(args, stdout=PIPE, stderr=PIPE)))

    images = []

    for uid, proc in processes:

    data, _ = proc.communicate()

    if output_folder is not None:

    images += __load_from_output_folder(output_folder, uid)

    else:

    images += parse_buffer_func(data)

    return images

    def convert_from_bytes(pdf_file, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', thread_count=1, userpw=None):

    """

    Description: Convert PDF to Image will throw whenever one of the condition is reached

    Parameters:

    pdf_file -> Bytes representing the PDF file

    dpi -> Image quality in DPI

    output_folder -> Write the resulting images to a folder (instead of directly in memory)

    first_page -> First page to process

    last_page -> Last page to process before stopping

    fmt -> Output image format

    thread_count -> How many threads we are allowed to spawn for processing

    userpw -> PDF's password

    """

    with tempfile.NamedTemporaryFile('wb') as f:

    f.write(pdf_file)

    f.flush()

    return convert_from_path(f.name, dpi=dpi, output_folder=output_folder, first_page=first_page, last_page=last_page, fmt=fmt, thread_count=thread_count, userpw=userpw)

    def pdf_page_count(pdf, password=None):

    return __page_count(pdf, password)

    def __build_command(args, output_folder, first_page, last_page, fmt, uid, userpw):

    if first_page is not None:

    args.extend(['-f', str(first_page)])

    if last_page is not None:

    args.extend(['-l', str(last_page)])

    parsed_format, parse_buffer_func = __parse_format(fmt)

    if parsed_format != 'ppm':

    args.append('-' + parsed_format)

    if output_folder is not None:

    args.append(os.path.join(output_folder, uid))

    if userpw is not None:

    args.extend(['-upw', userpw])

    return args, parse_buffer_func

    def __parse_format(fmt):

    if fmt[0] == '.':

    fmt = fmt[1:]

    if fmt == 'jpeg' or fmt == 'jpg':

    return 'jpeg', __parse_buffer_to_jpeg

    if fmt == 'png':

    return 'png', __parse_buffer_to_png

    # Unable to parse the format so we'll use the default

    return 'ppm', __parse_buffer_to_ppm

    def __parse_buffer_to_ppm(data):

    images = []

    index = 0

    while index < len(data):

    code, size, rgb = tuple(data[index:index + 40].split(b'\n')[0:3])

    size_x, size_y = tuple(size.split(b' '))

    file_size = len(code) + len(size) + len(rgb) + 3 + int(size_x) * int(size_y) * 3

    images.append(Image.open(BytesIO(data[index:index + file_size])))

    index += file_size

    return images

    def __parse_buffer_to_jpeg(data):

    return [

    Image.open(BytesIO(image_data + b'\xff\xd9'))

    for image_data in data.split(b'\xff\xd9')[:-1] # Last element is obviously empty

    ]

    def __parse_buffer_to_png(data):

    images = []

    index = 0

    while index < len(data):

    file_size = data[index:].index(b'IEND') + 8 # 4 bytes for IEND + 4 bytes for CRC

    images.append(Image.open(BytesIO(data[index:index+file_size])))

    index += file_size

    return images

    def __page_count(pdf_path, userpw=None):

    try:

    if userpw is not None:

    proc = Popen(["pdfinfo", pdf_path, '-upw', userpw], stdout=PIPE, stderr=PIPE)

    else:

    proc = Popen(["pdfinfo", pdf_path], stdout=PIPE, stderr=PIPE)

    out, err = proc.communicate()

    except:

    raise Exception('Unable to get page count. Is poppler installed and in PATH?')

    try:

    # This will throw if we are unable to get page count

    return int(re.search(r'Pages:\s+(\d+)', out.decode("utf8", "ignore")).group(1))

    except:

    raise Exception('Unable to get page count. %s' % err.decode("utf8", "ignore"))

    def __load_from_output_folder(output_folder, uid):

    return [Image.open(os.path.join(output_folder, f)) for f in sorted(os.listdir(output_folder)) if uid in f]

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    117

    118

    119

    120

    121

    122

    123

    124

    125

    126

    127

    128

    129

    130

    131

    132

    133

    134

    135

    136

    137

    138

    139

    140

    141

    142

    143

    144

    145

    146

    147

    148

    149

    150

    151

    152

    153

    154

    155

    156

    157

    158

    159

    160

    161

    162

    163

    164

    165

    166

    167

    168

    169

    170

    171

    172

    173

    174

    175

    176

    """

    pdf2image is a light wrapper for the poppler-utils tools that can convert your

    PDFs into Pillow images.

    """

    importos

    importre

    importtempfile

    importuuid

    fromioimportBytesIO

    fromsubprocessimportPopen,PIPE

    fromPILimportImage

    defconvert_from_path(pdf_path,dpi=200,output_folder=None,first_page=None,last_page=None,fmt='ppm',thread_count=1,userpw=None):

    """

    Description: Convert PDF to Image will throw whenever one of the condition is reached

    Parameters:

    pdf_path -> Path to the PDF that you want to convert

    dpi -> Image quality in DPI (default 200)

    output_folder -> Write the resulting images to a folder (instead of directly in memory)

    first_page -> First page to process

    last_page -> Last page to process before stopping

    fmt -> Output image format

    thread_count -> How many threads we are allowed to spawn for processing

    userpw -> PDF's password

    """

    page_count=__page_count(pdf_path,userpw)

    ifthread_count<1:

    thread_count=1

    iffirst_pageisNone:

    first_page=1

    iflast_pageisNoneorlast_page>page_count:

    last_page=page_count

    # Recalculate page count based on first and last page

    page_count=last_page-first_page+1

    ifthread_count>page_count:

    thread_count=page_count

    reminder=page_count%thread_count

    current_page=first_page

    processes=[]

    for_inrange(thread_count):

    # A unique identifier for our files if the directory is not empty

    uid=str(uuid.uuid4())

    # Get the number of pages the thread will be processing

    thread_page_count=page_count//thread_count+int(reminder>0)

    # Build the command accordingly

    args,parse_buffer_func=__build_command(['pdftoppm','-r',str(dpi),pdf_path],output_folder,current_page,current_page+thread_page_count-1,fmt,uid,userpw)

    # Update page values

    current_page=current_page+thread_page_count

    reminder-=int(reminder>0)

    # Spawn the process and save its uuid

    processes.append((uid,Popen(args,stdout=PIPE,stderr=PIPE)))

    images=[]

    foruid,procinprocesses:

    data,_=proc.communicate()

    ifoutput_folderisnotNone:

    images+=__load_from_output_folder(output_folder,uid)

    else:

    images+=parse_buffer_func(data)

    returnimages

    defconvert_from_bytes(pdf_file,dpi=200,output_folder=None,first_page=None,last_page=None,fmt='ppm',thread_count=1,userpw=None):

    """

    Description: Convert PDF to Image will throw whenever one of the condition is reached

    Parameters:

    pdf_file -> Bytes representing the PDF file

    dpi -> Image quality in DPI

    output_folder -> Write the resulting images to a folder (instead of directly in memory)

    first_page -> First page to process

    last_page -> Last page to process before stopping

    fmt -> Output image format

    thread_count -> How many threads we are allowed to spawn for processing

    userpw -> PDF's password

    """

    withtempfile.NamedTemporaryFile('wb')asf:

    f.write(pdf_file)

    f.flush()

    returnconvert_from_path(f.name,dpi=dpi,output_folder=output_folder,first_page=first_page,last_page=last_page,fmt=fmt,thread_count=thread_count,userpw=userpw)

    defpdf_page_count(pdf,password=None):

    return__page_count(pdf,password)

    def__build_command(args,output_folder,first_page,last_page,fmt,uid,userpw):

    iffirst_pageisnotNone:

    args.extend(['-f',str(first_page)])

    iflast_pageisnotNone:

    args.extend(['-l',str(last_page)])

    parsed_format,parse_buffer_func=__parse_format(fmt)

    ifparsed_format!='ppm':

    args.append('-'+parsed_format)

    ifoutput_folderisnotNone:

    args.append(os.path.join(output_folder,uid))

    ifuserpwisnotNone:

    args.extend(['-upw',userpw])

    returnargs,parse_buffer_func

    def__parse_format(fmt):

    iffmt[0]=='.':

    fmt=fmt[1:]

    iffmt=='jpeg'orfmt=='jpg':

    return'jpeg',__parse_buffer_to_jpeg

    iffmt=='png':

    return'png',__parse_buffer_to_png

    # Unable to parse the format so we'll use the default

    return'ppm',__parse_buffer_to_ppm

    def__parse_buffer_to_ppm(data):

    images=[]

    index=0

    whileindex

    code,size,rgb=tuple(data[index:index+40].split(b'\n')[0:3])

    size_x,size_y=tuple(size.split(b' '))

    file_size=len(code)+len(size)+len(rgb)+3+int(size_x)*int(size_y)*3

    images.append(Image.open(BytesIO(data[index:index+file_size])))

    index+=file_size

    returnimages

    def__parse_buffer_to_jpeg(data):

    return[

    Image.open(BytesIO(image_data+b'\xff\xd9'))

    forimage_dataindata.split(b'\xff\xd9')[:-1]# Last element is obviously empty

    ]

    def__parse_buffer_to_png(data):

    images=[]

    index=0

    whileindex

    file_size=data[index:].index(b'IEND')+8# 4 bytes for IEND + 4 bytes for CRC

    images.append(Image.open(BytesIO(data[index:index+file_size])))

    index+=file_size

    returnimages

    def__page_count(pdf_path,userpw=None):

    try:

    ifuserpwisnotNone:

    proc=Popen(["pdfinfo",pdf_path,'-upw',userpw],stdout=PIPE,stderr=PIPE)

    else:

    proc=Popen(["pdfinfo",pdf_path],stdout=PIPE,stderr=PIPE)

    out,err=proc.communicate()

    except:

    raiseException('Unable to get page count. Is poppler installed and in PATH?')

    try:

    # This will throw if we are unable to get page count

    returnint(re.search(r'Pages:\s+(\d+)',out.decode("utf8","ignore")).group(1))

    except:

    raiseException('Unable to get page count. %s'%err.decode("utf8","ignore"))

    def__load_from_output_folder(output_folder,uid):

    return[Image.open(os.path.join(output_folder,f))forfinsorted(os.listdir(output_folder))ifuidinf]

    7、main.py

    入口主程序,传入doc文档,得到png图片^_^

    Python

    import os

    import time

    from PIL import Image

    from PIL import ImageFont

    from PIL import ImageDraw

    from config import *

    from pdf2image import convert_from_path, pdf_page_count

    from doc2pdf import doc2pdf

    def doc2image(doc, fmt='png', output_dir=None, watermark=None, fpage=None, lpage=None):

    if output_dir is None:

    output_dir = TARGET_DIR

    target_name = os.path.join(output_dir, "{}.{}".format(int(time.time()), fmt))

    temp_pdf = doc2pdf(doc, pdf_path=DEFAULT_OUTPUT_DIR)

    if fpage is None:

    fpage = 1

    if lpage is not None:

    page_count = lpage - fpage + 1

    else:

    page_count = pdf_page_count(temp_pdf)

    print("pdf to image, converting...")

    to_image = _convert_pdf_to_image(temp_pdf, page_count, fmt, fpage, lpage)

    if watermark is not None:

    watermark_image = _make_watermark_image(to_image.size, watermark, page_count)

    # 合并内容图片和水印图片

    out = Image.alpha_composite(to_image, watermark_image)

    # out.show()

    # 转换为RGB模式才可保存为图片

    out.convert("RGB").save(target_name)

    else:

    to_image.save(target_name)

    print("job done!")

    def _convert_pdf_to_image(pdf, page_count, fmt, f, l, save=False):

    '''

    params:

    pdf: 待转换的pdf文件路径

    page_count: 要转换的页数

    fmt: 转换的图片格式

    f: 要转换的开始页数

    l: 结束页数

    save: 是否保留pdf文件,默认不保留

    '''

    # 根据页数转换为相应数量的图片

    image_list = convert_from_path(pdf, fmt=fmt, first_page=f, last_page=l)

    target_name = os.path.join(TARGET_DIR, "{}.{}".format(int(time.time()), fmt))

    to_image = Image.new('RGBA', (IMAGE_WIDTH, page_count * IMAGE_HEIGHT))

    for i, image in enumerate(image_list):

    # 计算高度,拼合单张图片到一整张图片上

    loc = (0, i * IMAGE_HEIGHT)

    to_image.paste(image, loc)

    if not save:

    try:

    os.remove(pdf)

    except Exception as e:

    print("fail to remove pdf, please check and remove it manually")

    return to_image

    def _make_watermark_image(image_size, watermark, count=1):

    '''

    生成水印图片

    params:

    image_size: 水印图片大小,与底板图片大小一致

    watermark: 水印文本

    count: 水印数量, 与内容页数保持一致

    '''

    fnt = ImageFont.truetype(font=FONT_FILE, size=80)

    watermark_image = Image.new('RGBA', image_size, color=BACKGROUND_COLOR)

    draw = ImageDraw.Draw(watermark_image)

    for i in range(1, count+1):

    draw.multiline_text((WATERMARK_LEFT, WATERMARK_TOP * i), watermark, font=fnt, fill=FONT_COLOR)

    return watermark_image

    if __name__ == '__main__':

    txt = "玩点coding https://vdcoding.com"

    doc = "resume.docx"

    doc2image(doc, watermark=txt)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    importos

    importtime

    fromPILimportImage

    fromPILimportImageFont

    fromPILimportImageDraw

    fromconfigimport*

    frompdf2imageimportconvert_from_path,pdf_page_count

    fromdoc2pdfimportdoc2pdf

    defdoc2image(doc,fmt='png',output_dir=None,watermark=None,fpage=None,lpage=None):

    ifoutput_dirisNone:

    output_dir=TARGET_DIR

    target_name=os.path.join(output_dir,"{}.{}".format(int(time.time()),fmt))

    temp_pdf=doc2pdf(doc,pdf_path=DEFAULT_OUTPUT_DIR)

    iffpageisNone:

    fpage=1

    iflpageisnotNone:

    page_count=lpage-fpage+1

    else:

    page_count=pdf_page_count(temp_pdf)

    print("pdf to image, converting...")

    to_image=_convert_pdf_to_image(temp_pdf,page_count,fmt,fpage,lpage)

    ifwatermarkisnotNone:

    watermark_image=_make_watermark_image(to_image.size,watermark,page_count)

    # 合并内容图片和水印图片

    out=Image.alpha_composite(to_image,watermark_image)

    # out.show()

    # 转换为RGB模式才可保存为图片

    out.convert("RGB").save(target_name)

    else:

    to_image.save(target_name)

    print("job done!")

    def_convert_pdf_to_image(pdf,page_count,fmt,f,l,save=False):

    '''

    params:

    pdf: 待转换的pdf文件路径

    page_count: 要转换的页数

    fmt: 转换的图片格式

    f: 要转换的开始页数

    l: 结束页数

    save: 是否保留pdf文件,默认不保留

    '''

    # 根据页数转换为相应数量的图片

    image_list=convert_from_path(pdf,fmt=fmt,first_page=f,last_page=l)

    target_name=os.path.join(TARGET_DIR,"{}.{}".format(int(time.time()),fmt))

    to_image=Image.new('RGBA',(IMAGE_WIDTH,page_count*IMAGE_HEIGHT))

    fori,imageinenumerate(image_list):

    # 计算高度,拼合单张图片到一整张图片上

    loc=(0,i*IMAGE_HEIGHT)

    to_image.paste(image,loc)

    ifnotsave:

    try:

    os.remove(pdf)

    exceptExceptionase:

    print("fail to remove pdf, please check and remove it manually")

    returnto_image

    def_make_watermark_image(image_size,watermark,count=1):

    '''

    生成水印图片

    params:

    image_size: 水印图片大小,与底板图片大小一致

    watermark: 水印文本

    count: 水印数量, 与内容页数保持一致

    '''

    fnt=ImageFont.truetype(font=FONT_FILE,size=80)

    watermark_image=Image.new('RGBA',image_size,color=BACKGROUND_COLOR)

    draw=ImageDraw.Draw(watermark_image)

    foriinrange(1,count+1):

    draw.multiline_text((WATERMARK_LEFT,WATERMARK_TOP*i),watermark,font=fnt,fill=FONT_COLOR)

    returnwatermark_image

    if__name__=='__main__':

    txt="玩点coding https://vdcoding.com"

    doc="resume.docx"

    doc2image(doc,watermark=txt)

    三、待完善的地方

    笔者从网上下载了份docx格式的简历模板,通过上边的程序转换后得到的图片如下:

    从图中可以看到个人信息部分的样式跑偏了,这部分是在docx->pdf过程中的排版引擎决定的,所以想要获得完美的图片,先要好好研究下排版引擎的使用,排版引擎可以加载多种扩展包,用来支持不同的排版格式。笔者只是兴趣使然,在短时间内实现了docx到图片的转换,没有深入研究排版引擎部分。关于这种转换笔者能力有限,只能以这种繁琐的方式实现,不过笔者倒是很好奇BOSS直聘是如何实现的,如果有机会真心希望交流一下。

    展开全文
  • Pages 转Word .docx /docx 格式的方法

    千次阅读 2021-04-10 16:06:23
    小编就教给大家将Pages 转Word .doc/docx 格式的方法。 Mac 内建Pages 转Word .doc/docx 格式的方法 1.在Pages 里面其实就有内建档的功能,可以将Pages 转Word 可读取的doc/docx 格式。如果要将Pages 转为Word ...

    使用Mac 的朋友很多都会安装Pages 来使用,这是苹果免费提供给Mac 使用者的文本处理软件,但是用Pages 储存的档案,一般PC 无法开启,如果要把档案给使用PC 的朋友要怎么转档?小编就教给大家将Pages 转Word .doc/docx 格式的方法。

    Mac 内建Pages 转Word .doc/docx 格式的方法

    1.在Pages 里面其实就有内建转档的功能,可以将Pages 转Word 可读取的doc/docx 格式。如果要将Pages 转为Word 可读取的格式,可以选择左上方选单列的「档案」>「输出至」。

    2.在「输出至」的旁边会跳出另外一个选单,这边选择「Word…」,这就是最主要Pages 转Word .doc/.docx 格式的转档功能。

    3.选择「Word」这个功能页签,点击「进阶选项」还能够选择是要输出2007 年以后的Word 格式.docx 或是2007 年之前的.doc 格式。

    4.建立档名以及选择存放的位置,这样就完成Pages 转Word 的.doc/.docx 格式步骤。可以看到我们打开该档案的资讯后,电脑显示的是「Microsoft Word 文件」。

    想了解更多苹果/mac产品使用技巧,关注我们获取更多有mac信息。

    展开全文
  • word文档转为PDF以及多种文档格式转换 项目地址:https://gitee.com/Jakewabc/word-of-pdf.git 相关案例: https://github.com/aspose-words/Aspose.Words-for-Java.git ...这是在GitHub上的,拉去非常慢。...

    word文档转为PDF以及多种文档格式转换

    项目地址:https://gitee.com/Jakewabc/word-of-pdf.git

    相关案例:

    https://github.com/aspose-words/Aspose.Words-for-Java.git

    https://github.com/aspose-pdf/Aspose.PDF-for-Java.git

    这是在GitHub上的,拉去非常慢。建议在gitee上创建项目哪里,点击创建项目,下面有一个导入已有的项目。将GitHub上的地址给他就可以克隆一个项目过来,拉去速度就快了。但是这两个项目在gitee上是有地址的。

    一、获取jar并安装到maven本地仓库

    1.1、需要的jar

    需要使用的jar

    在这里插入图片描述

    1.2、安装jar

    aspose-pdf-18.9.jar 最好放到外面来安装到本地仓库,因为这个所在的 aspose.pdf for java 18.9完美破解版,无水印,无使用时间限制目录中有空格,安装不到本地仓库中。

    安装jar到本地仓库,参考:https://blog.csdn.net/u010393325/article/details/84314543

    • 命令
    mvn install:install-file -DgroupId=groupId引用的名字 -DartifactId=aspose-artifactId引用的名字 -Dversion=版本号 -Dpackaging=jar -Dfile=jar所在的地址
    

    版本号在jar的末尾有写到。

    • 我安装的命令

    需要更改jar所在的目录。

    mvn install:install-file -DgroupId=com.aspose -DartifactId=aspose-words -Dversion=19.5 -Dpackaging=jar -Dfile=E:\临时文件\aspose-words-19.5jdk.jar
    
    mvn install:install-file -DgroupId=com.aspose -DartifactId=aspose-pdf -Dversion=18.9 -Dpackaging=jar -Dfile=E:\临时文件\aspose-pdf-18.9.jar
    

    1.3、maven项目中引入jar

    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-pdf</artifactId>
        <version>18.9</version>
    </dependency>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-words</artifactId>
        <version>19.5</version>
    </dependency>
    

    二、将word转为PDF

    word.doc.docx格式都可以转换。

    • 全部代码

    贴全部代码的目的是为了将所在的包也显示。

    package com.word.pdf;
    
    import com.aspose.words.*;
    
    /**
     * @author: stars
     * @date: 2020年 07月 30日 13:58
     **/
    public class TestDemo {
    
        public static void main(String[] args) throws Exception {
            String inputPath = "C:\\Users\\stars\\Desktop\\powerdesigner使用.doc" ;
            String outPath = "C:\\Users\\stars\\Desktop";
            String fileName = "powerdesigner使用";
            setShowInBalloons(inputPath,outPath,fileName);
        }
        /**
         * 将word文档转为PDF文档
         *
         * @param inputPath word文档所在的地址
         * @param outPath 生成pdf输出的地址
         * @param fileName 生成后PDF的名字<b>注意:名字不要带后缀,下面自动封装了。</b>
         * @throws Exception
         */
        private static void setShowInBalloons(String inputPath,String outPath,String fileName) throws Exception {
            Document doc = new Document(inputPath);
            // 获取控制修订外观的RevisionOptions对象
            RevisionOptions revisionOptions = doc.getLayoutOptions().getRevisionOptions();
            // 在引出序号中显示删除修订
            revisionOptions.setShowInBalloons(ShowInBalloons.FORMAT_AND_DELETE);
            // 输出
            doc.save(outPath + "\\" + fileName+ ".pdf");
        }
    }
    

    效果就不展示了,反正这样就能转换。

    三、word文件追加

    import com.aspose.words.Document;
    import com.aspose.words.ImportFormatMode;
    import com.aspose.words.RevisionOptions;
    import com.aspose.words.ShowInBalloons;
    
    /**
     * word文件追加
     */
    public static void AppendDocuments(){
        // 文件路径
        String dataDir = "C:\\Users\\stars\\Desktop\\" ;
        // 源文件
        Document dstDoc = new Document(dataDir + "powerdesigner使用.doc");
        // 需要追加的文件(将srcDoc文件追加在dstDoc后面)
        Document srcDoc = new Document(dataDir + "ZS-1000质量手册.docx");
        // Append the source document to the destination document while keeping the original formatting of the source document.
        dstDoc.appendDocument(srcDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
        // 追加后的文件
        dstDoc.save(dataDir + "TestFile Out.docx");
        //ExEnd:
    
        System.out.println("Documents appended successfully.");
    }
    

    四、word文档替换

    import com.aspose.words.*;
    
    import java.util.regex.Pattern;
    
    /**
     * 查找并替换
     * @param replaceMark 替换表示符
     * @param replaceAfter 替换的数据
     * @throws Exception
     */
    public static void FindAndReplace(String replaceMark,String replaceAfter) throws Exception {
        // 文件路径
        String dataDir = "C:\\Users\\stars\\Desktop\\" ;
        // 源文件
        Document doc = new Document(dataDir + "powerdesigner使用.doc");
        // 检查文档的文本
        System.out.println("Original document text: " + doc.getRange().getText());
    
        Pattern regex = Pattern.compile(replaceMark, Pattern.CASE_INSENSITIVE);
        // Replace the text in the document.
        doc.getRange().replace(regex, replaceAfter, new FindReplaceOptions());
        // Check the replacement was made.
        System.out.println("Document text after replace: " + doc.getRange().getText());
        // 替换后的文件
        doc.save(dataDir + "ReplaceSimpleOut.doc");
    }
    

    替换是应该需要注意

    如果替换符为 namenamea。那么 name替换符先执行,那么 namea的地方就会将 name也替换了,后面剩下 a。但是这个a又没有替换的地方,所以就保存了下来。这样会造成替换上的失误,所以建议替换符使用UUID去掉横线或者生成分布式id来充当。

    五、PDF获取指定页或者总页码数

    这种方式有些页面不能获取,推荐使用另一个jar包完整,第六章会详细讲解。

    import com.aspose.pdf.Document;
    import com.aspose.pdf.Page;
    
    import java.io.IOException;
    
    /**
     * 获取PDF指定页面
     * <p>如果获取所有PDF,就直接使用 pdfDocument。如果获取指定页数就是使用 newDocument。如果返回所有pdfDocument.save(response.getOutputStream());
     * 如果返回指定页,newDocument.save(response.getOutputStream());
     * </p>
     * @param page 获取的页数
     * @return pdf总页数
     */
    public static Integer GetPageCountWithoutSavingPDF(Integer page) throws IOException {
        // Open a document
        Document pdfDocument = new Document("C:\\Users\\stars\\Desktop\\a.pdf");
        // 获取指定页面
        Page pdfPage = pdfDocument.getPages().getUnrestricted(page);
        // 创建Document 对象,将指定页面写入
        Document newDocument = new Document();
        // Add the page to the Pages collection of new document object
        newDocument.getPages().add(pdfPage);
        // Save the new file
        newDocument.save("C:\\Users\\stars\\Desktop\\page_" + pdfPage.getNumber() + ".pdf");
        // 返回总页数
        return pdfDocument.getPages().size();
    }
    

    六、指定页面获取PDF文档

    第五章节提到的这种方式,有些页面会获取不多,所以换一个jar包获取。

    6.1、引入依赖

    <dependency>
        <groupId>net.sf.cssbox</groupId>
        <artifactId>pdf2dom</artifactId>
        <version>1.7</version>
    </dependency>
    

    如果只完成获取指定页面的PDF文档,那么这个jar包已经足够了,但是配套的还有两个jar包。这些都是开源的,不需要特意准备,直接拉去就OK。下面这两个具体用途可以自己去参考。

    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox-tools</artifactId>
        <version>2.0.12</version>
    </dependency>
    

    6.2、直接贴代码

    import org.apache.pdfbox.multipdf.Splitter;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    
    /**
     *
     * @param fileName 文件名称
     * @param pageNum 读取的页数
     * @param filePath 文件路径
     * @return
     */
    public void splitPdf(HttpServletResponse response, int pageNum, String filePath) {
        // 这是对应文件名
        File indexFile = new File(filePath);
        PDDocument document = null;
        try {
            document = PDDocument.load(indexFile);
            // 获取总页数
            int numberOfPages = document.getNumberOfPages();
            System.out.println("总页数告诉你哦:"+numberOfPages);
    
            Splitter splitter = new Splitter();
            // 开始页
            splitter.setStartPage(pageNum);
            // 结束页
            splitter.setEndPage(pageNum);
            List<PDDocument> pages = splitter.split(document);
            for (PDDocument pdDocument : pages){
                pdDocument.save(response.getOutputStream());
                pdDocument.close();
            }
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    七、将PDF转为word

    如果是一个大文档,我们给前端渲染的时候不会全部给他,而是一次一页一页的给。那么我们是一个大文档模板怎么办。将这个大文档存为PDF格式,每次一页一页的获取,因为PDF不能更改,属于最终文本。那么我们就可以将pdf转为word替换为最终文档,然后在将word转为PDF给前端显示。

    7.1、pdf和word优缺点

    pdf

    • 优点

    pdf支持读取指定的页面,前端页支持直接渲染pdf格式的文本。所以大文档就不用全部读取,只需要读取指定页面就好。

    • 缺点

    pdf不支持更改

    word

    • 优点

    支持更改和替换

    • 缺点

    不支持获取指定页的文档,前端不支持显示。

    7.2、pdf转为doc

    这种方式只支持转换 4 页

    import com.aspose.pdf.*;
    
    import java.io.IOException;
    
    /**
     * pdf转为doc
     */
    public static void savingToDoc(){
        // 读取pdf文档
        Document pdfDocument = new Document("C:\\Users\\stars\\Desktop\\abc.pdf");
        // 转换为doc文档
        pdfDocument.save("C:\\Users\\stars\\Desktop\\TableHeightIssue.doc", SaveFormat.Doc);
    }
    

    7.3、pdf转为docx

    这种方式只支持转换 4 页

    这种方式转为doc也可以,只需要将文件后缀换一下就行。

    import com.aspose.pdf.*;
    
    import java.io.IOException;
    
    /**
     * pdf转为docx
     */
    public static void savingToDOCX() {
        // Load source PDF file
        Document doc = new Document("C:\\Users\\stars\\Desktop\\abc.pdf");
        // Instantiate Doc SaveOptions instance
        DocSaveOptions saveOptions = new DocSaveOptions();
        // Set output file format as DOCX
        saveOptions.setFormat(DocSaveOptions.DocFormat.DocX);
        // Save resultant DOCX file
        doc.save("C:\\Users\\stars\\Desktop\\TableHeightIssue.docx", saveOptions);
    }
    

    八、PDF转为PPT

    import com.aspose.pdf.*;
    
    import java.io.IOException;
    
    /**
     * 将PDF转为ppt
     */
    public static void ConvertPDFToPPTX(){
        // Load PDF document
        Document doc =new Document("C:\\Users\\stars\\Desktop\\t.pdf");
        // Instantiate PptxSaveOptions instance
        PptxSaveOptions pptx_save = new PptxSaveOptions();
        // Save the output in PPTX format
        doc.save("C:\\Users\\stars\\Desktop\\output.pptx", pptx_save);
    }
    

    九、PDF转为SVG图片

    import com.aspose.pdf.*;
    
    import java.io.IOException;
    
    /**
     * 将pdf转为SVG图片
     */
    public static void ConvertPDFToSVGFormat(){
        // load PDF document
        Document doc = new Document("C:\\Users\\stars\\Desktop\\t.pdf");
        // instantiate an object of SvgSaveOptions
        SvgSaveOptions saveOptions = new SvgSaveOptions();
        // do not compress SVG image to Zip archive
        saveOptions.CompressOutputToZipArchive = false;
        // resultant file name
        String outFileName ="C:\\Users\\stars\\Desktop\\Output.svg";
        // save the output in SVG files
        doc.save(outFileName, saveOptions);
    }
    

    十、将SVG转为PDF

    import com.aspose.pdf.*;
    
    import java.io.IOException;
    
    /**
     * 将SVG转为PDF
     */
    public static void ConvertSVGFileToPDFFormat(){
        String file = "C:\\Users\\stars\\Desktop\\Output.svg";
        // Instantiate LoadOption object using SVG load option
        LoadOptions options = new SvgLoadOptions();
        // Create Document object
        Document document = new Document(file, options);
        // Save the resultant PDF document
        document.save("C:\\Users\\stars\\Desktop\\Result.pdf");
    }
    

    十一、将PDF转为HTML

    显示大文档模板思路

    完成大文本显示那种,就可以将大文档存放成PDF的格式。获取PDF指定页的文档模板,在转为HTML替换为真正的文档就可以个前端显示。

    11.1、方式一

    效果还可以

    import com.aspose.pdf.*;
    import com.aspose.pdf.text.CustomFontSubstitutionBase;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * pdf转为HTML格式
     */
    public static void EscapeHTMLTagsAndSpecialCharacters(){
        // Load existing PDf file
        Document pdfDoc = new Document("C:\\Users\\stars\\Desktop\\abc.pdf");
        final Map names = new HashMap();
        /*pdfDoc.FontSubstitution.add(new Document.FontSubstitutionHandler() {
            public void invoke(Font font, Font newFont) {
                // add substituted FontNames into map.
                names.put(font.getFontName(), newFont.getFontName());
                // or print the message into console
                System.out.println("Warning: Font " + font.getFontName() + " was substituted with another font -> " + newFont.getFontName());
            }
        });*/
        // instantiate HTMLSave option to save output in HTML
        HtmlSaveOptions htmlSaveOps = new HtmlSaveOptions();
        // save resultant file
        pdfDoc.save("C:\\Users\\stars\\Desktop\\output.html", htmlSaveOps);
    }
    

    11.2、方式二

    这种方式转换的效果不好

    import com.aspose.pdf.*;
    import com.aspose.pdf.text.CustomFontSubstitutionBase;
    
    import java.io.IOException;
    
    /**
     * pdf转为HTML
     * @throws Exception
     */
    public static void DefaultFontWhenSpecificFontMissing() throws Exception {
        String myDir = "C:\\Users\\stars\\Desktop\\";
        Document pdf = new Document(myDir + "t.pdf");
        // configure font substitution
        CustomSubst1 subst1 = new CustomSubst1();
        FontRepository.getSubstitutions().add(subst1);
        // Configure notifier to console
        pdf.FontSubstitution.add(new Document.FontSubstitutionHandler() {
            public void invoke(Font font, Font newFont) {
                // print substituted FontNames into console
                System.out.println("Warning: Font " + font.getFontName() + " was substituted with another font -> " + newFont.getFontName());
            }
        });
        HtmlSaveOptions htmlSaveOps = new HtmlSaveOptions();
        pdf.save(myDir + "Redis_1150_substitutedWithMSGothic_release.html", htmlSaveOps);
    }
    private static class CustomSubst1 extends CustomFontSubstitutionBase {
        public boolean trySubstitute(OriginalFontSpecification originalFontSpecification, /* out */com.aspose.pdf.Font[] substitutionFont) {
            substitutionFont[0] = FontRepository.findFont("MSGothic");
            return true;
        }
    }
    

    十二、PDF转为emf文件

    只能转换一页

    import com.aspose.pdf.*;
    import com.aspose.pdf.devices.EmfDevice;
    import com.aspose.pdf.devices.Resolution;
    import com.aspose.pdf.text.CustomFontSubstitutionBase;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * pdf转为emf文件,只能转换一页
     */
    public static void PDFToEMF(){
        // instantiate EmfDevice object
        EmfDevice device = new EmfDevice(new Resolution(96));
        // load existing PDF file
        Document doc = new Document("C:\\Users\\stars\\Desktop\\abc.pdf");
        // save first page of PDF file as Emf image
        device.process(doc.getPages().get_Item(1), "C:\\Users\\stars\\Desktop\\output.emf");
    }
    

    十三、向PDF文档中添加表格

    import com.aspose.pdf.*;
    import com.aspose.pdf.devices.EmfDevice;
    import com.aspose.pdf.devices.Resolution;
    import com.aspose.pdf.text.CustomFontSubstitutionBase;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 在现有的PDF 文档中添加数据
     * <p>指定页添加表格</p>
     */
    public static void addTableInExistingPDFDocument(){
        // Load source PDF document
        Document doc =  new Document("C:\\Users\\stars\\Desktop\\abc.pdf");
        // 初始化表的新实例
        Table table = new Table();
        // 将表格边框颜色设置为浅灰色
        table.setBorder(new BorderInfo(BorderSide.All, .5f, Color.getLightGray()));
        // 设置表格单元格的边框
        table.setDefaultCellBorder(new BorderInfo(BorderSide.All, .5f, Color.getLightGray()));
    
        // 添加三列十行的数据
        for (int row_count = 1; row_count < 10; row_count++) {
            // 向表中添加行
            Row row = table.getRows().add();
            // 添加表格的行数据
            row.getCells().add("Column (" + row_count + ", 1)");
            row.getCells().add("Column (" + row_count + ", 2)");
            row.getCells().add("Column (" + row_count + ", 3)");
        }
        // 在PDF文档的第二页添加 table 这个表格
        doc.getPages().getUnrestricted(2).getParagraphs().add(table);
        doc.save( "C:\\Users\\stars\\Desktop\\Annotation_output.pdf");
    }
    

    十四、创建PDF文档,并添加表格

    import com.aspose.pdf.*;
    import com.aspose.pdf.devices.EmfDevice;
    import com.aspose.pdf.devices.Resolution;
    import com.aspose.pdf.text.CustomFontSubstitutionBase;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 创建PDF文档,并添加表格
     */
    public static void setAutoFitToWindowPropertyInColumnAdjustmentTypeEnumeration(){
        //Instantiate the PDF object by calling its empty constructor
        Document doc = new Document();
        //Create the section in the PDF object
        Page page = doc.getPages().add();
    
        //Instantiate a table object
        Table tab = new Table();
        //Add the table in paragraphs collection of the desired section
        page.getParagraphs().add(tab);
    
        //Set with column widths of the table
        tab.setColumnWidths("50 50 50");
        tab.setColumnAdjustment(ColumnAdjustment.AutoFitToWindow);
    
        //Set default cell border using BorderInfo object
        tab.setDefaultCellBorder(new com.aspose.pdf.BorderInfo(com.aspose.pdf.BorderSide.All, 0.1F));
    
        //Set table border using another customized BorderInfo object
        tab.setBorder(new com.aspose.pdf.BorderInfo(com.aspose.pdf.BorderSide.All, 1F));
        //Create MarginInfo object and set its left, bottom, right and top margins
        com.aspose.pdf.MarginInfo margin = new com.aspose.pdf.MarginInfo();
        margin.setTop(5f);
        margin.setLeft(5f);
        margin.setRight(5f);
        margin.setBottom(5f);
    
        //Set the default cell padding to the MarginInfo object
        tab.setDefaultCellPadding(margin);
    
        //Create rows in the table and then cells in the rows
        com.aspose.pdf.Row row1 = tab.getRows().add();
        row1.getCells().add("col1");
        row1.getCells().add("col2");
        row1.getCells().add("col3");
        com.aspose.pdf.Row row2 = tab.getRows().add();
        row2.getCells().add("item1");
        row2.getCells().add("item2");
        row2.getCells().add("item3");
    
        //Save the PDF
        doc.save( "C:\\Users\\stars\\Desktop\\Annotation_output.pdf");
    }
    

    十五、添加PDF并添加数据

    import com.aspose.pdf.*;
    import com.aspose.pdf.devices.EmfDevice;
    import com.aspose.pdf.devices.Resolution;
    import com.aspose.pdf.text.CustomFontSubstitutionBase;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 新建PDF添加数据
     */
    public static void ForceTableRenderingOnNewPage(){
        // Added document
        Document doc = new Document();
        PageInfo pageInfo = doc.getPageInfo();
        MarginInfo marginInfo = pageInfo.getMargin();
        marginInfo.setLeft(37);
        marginInfo.setRight(37);
        marginInfo.setTop(37);
        marginInfo.setBottom(37);
        pageInfo.setLandscape(true);
        Table table = new Table();
        table.setColumnWidths("50 100");
        // Added page.
        Page curPage = doc.getPages().add();
        for (int i = 1; i <= 120; i++) {
            Row row = table.getRows().add();
            row.setFixedRowHeight(15);
            Cell cell1 = row.getCells().add();
            cell1.getParagraphs().add(new TextFragment("Content 1"));
            Cell cell2 = row.getCells().add();
            cell2.getParagraphs().add(new TextFragment("HHHHH"));
        }
        Paragraphs paragraphs = curPage.getParagraphs();
        paragraphs.add(table);
        /********************************************/
        Table table1 = new Table();
        table.setColumnWidths("100 100");
        for (int i = 1; i <= 10; i++) {
            Row row = table1.getRows().add();
            Cell cell1 = row.getCells().add();
            cell1.getParagraphs().add(new TextFragment("LAAAAAAA"));
            Cell cell2 = row.getCells().add();
            cell2.getParagraphs().add(new TextFragment("LAAGGGGGG"));
        }
        table1.setInNewPage(true);
        // I want to keep table 1 to next page please...
        paragraphs.add(table1);
        //Save the PDF
        doc.save( "C:\\Users\\stars\\Desktop\\Annotation_output.pdf");
    }
    

    十六、PDF替换指定内容

    这种最好是一个字符替换为一个字符的那种,如果你一个字符替换很多字符。那么会出现有些内容显示不出来,因为其他文本不会让出空间来的。建议:将PDF转为word文档,替换完了再将word转为PDF文档。

    pdf替换只支持前三页

    import com.aspose.pdf.*;
    import com.aspose.pdf.devices.EmfDevice;
    import com.aspose.pdf.devices.Resolution;
    import com.aspose.pdf.text.CustomFontSubstitutionBase;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 替换文本
     * <b>如果一个文字替换一个文字,还行,因为其他格式是不变话的。只能替换前三页</b>
     * @param BeforeReplacement 替换前
     * @param AfterReplacement 替换后
     */
    public static void replaceTextOnAllPages(String BeforeReplacement,String AfterReplacement){
        // 需要替换的文本
        Document doc = new Document("C:\\Users\\stars\\Desktop\\abc.pdf");
        // 需要替换的字符
        TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(BeforeReplacement);
        // Accept the absorber for first page of document
        doc.getPages().accept(textFragmentAbsorber);
        // Get the extracted text fragments into collection
        TextFragmentCollection textFragmentCollection = textFragmentAbsorber.getTextFragments();
        // Loop through the fragments
        for (TextFragment textFragment : (Iterable<TextFragment>) textFragmentCollection) {
            // Update text and other properties
            textFragment.setText(AfterReplacement);
            // 字体大小
            textFragment.getTextState().setFontSize(10);
            textFragment.getTextState().setForegroundColor(Color.getBlack());
            // 背景色,现在是白色
            textFragment.getTextState().setBackgroundColor(Color.getWhite());
        }
        // 替换后的文本
        doc.save( "C:\\Users\\stars\\Desktop\\Annotation_output.pdf");
    }
    
    展开全文
  • 使用Python的word文档的页数(Number of pages of a word document with Python)有没有办法用Python有效地获得word文档(.doc,.docx)的页数?对于.odt文件?我想将它用于基于Linux上的Web2py的Web应用程序。谢谢 !...
  • 在前端如何玩 Word 文档

    千次阅读 2020-07-20 17:14:31
    在日常工作中,大部分人都会使用 Microsoft Office Word、WPS 或 macOS Pages 等文字处理程序进行 Word 文档处理。除了使用上述的文字处理程序之外,对...
  • 对于用 Pages 来做文字处理的 Mac 用户来说,有一个简单的选项可以提高跨平台文档的可读性和兼容性,就是保存(或导出) Pages 文件为 Word 的 .doc 或 .docx 文件。以下讲解是用最新版本的 Pages 文件导出为 Word ...
  • 在各种情况下,可能需要将MS Word文档拆分为多个文档。例如,您可能需要为Word文档中的每个页面,每个部分或页面集合创建一个单独的文档。为了自动进行文档拆分,本文介绍了如何使用Java以编程方式拆分MS Word文档。...
  • 在本篇文章中,将继续介绍关于Word文档的转换功能(WordXPS/SVG/EMF/EPUB/TIFF)希望方法中的代码能为各位开发者们提供一定的参考价值。 使用方法:下载安装该控件后,在VS控制台应用程序中添加引用Spire.Doc.dll...
  • Pages for mac是苹果办公软件套装iWork三剑客之一,是一款简捷易用的文字处理与页面排版应用程序,它能帮助你随时制作出完美的文档,让你瞬间变身作家和平面设计师。 若要将 Pages 文稿的副本存储为其他格式,您可以...
  • 分享给大家供大家参考,具体如下:有时我们需要把网页内容保存为Word文档格式,以供其他人员查看和编辑。PHPWord是一个用纯PHP编写的库,使用PHPWord可以轻松处理word文档内容,生成你想要的word文档。安装我们使用...
  • pages from books in communication
  • 用Python把PDF文件转换成Word文档

    万次阅读 2018-09-29 18:34:00
    # 检测文档是否提供txt转换,不提供就忽略 38   if   not  doc.is_extractable: 39   raise  PDFTextExtractionNotAllowed 40   else : 41   # 创建PDf 资源管理器 来管理共享资源 42  rsrcmgr = ...
  • Qt操作Word文档

    千次阅读 2019-11-01 10:07:15
    Qt提供QAxObject操作Word文档, 准备工作 1.Qt pro文件中加入QT += axcontainer 2.电脑上至少有Word或者WPS /******************************************************************** @brief: 通用的word操作类,...
  • python获取word文档和pdf文档页数的方法 1、获取pdf页码数 这里要使用到 pdfplumber 这个库,首先导入 没有安装的同学还需要先安装 pip install pdfplumber import pdfplumber from pdfminer.pdfparser import ...
  • 我还需要确定给定word文件(doc/docx)的页数。我试图调查phplivedocx/zf(@hobodave链接到最初的post答案中),但我在那里失去了手脚。我也不能使用任何外部web服务(比如doc2pdf站点,然后计算pdf版本中的页面数,等等...
  • 根据模板生成word文档下载

    千次阅读 2017-07-04 10:36:38
    需求:根据数据库已有字段,填入写好的word并下载 工具 :freemark 一种方便生成word的引擎,内置好大量基础方法 思路: 一.将数据库数据按需求(根据id,根据name......)提取存储在一个map中待用 二.将模板word生成ftl文件...
  • Is there a way to get efficiently the number of pages of a word document (.doc, .docx) with Python ?And for an .odt file ?I want to use this for a web application based on Web2py on Linux.Thank you !...
  • word文档多个目录Are you creating a very long document, but hate the thought of dealing with Word’s master document feature? The Master document feature in Word has been known in the past to corrupt ...
  • 前端:html页面生成word文档

    千次阅读 2019-08-09 11:40:43
    近期接到一个需求,在原来打印的基础上增加一个导出wordn文档功能作为文件存档,由于各种因素的推动,最终由前端完成,查阅大量文档后,选用jquery.wordexport和FileSaver两个文件搭配jquery文件来实现这个需求...
  • You may not think of Word as a tool for designing web pages, and that’s okay—it’s really not very good at it, anyway. But, if you have an existing Word document that you need to turn into a web ...
  • word文档结构图错乱The Document Map in Word 2007 provides easy navigation in long documents. You can jump around your document by headings or pages. It also provides a bird’s-eye view of your document...
  • word文档中指定页加水印A watermark is a faded background image that displays behind the text in a document. You can use them to indicate a document’s state (confidential, draft, etc.), add a subtle ...
  • 有时我们需要把网页内容保存为Word文档格式,以供其他人员查看和编辑。PHPWord是一个用纯PHP编写的库,使用PHPWord可以轻松处理word文档内容,生成你想要的word文档。 下载源码 安装 我们使用Composer来安装...
  • Microsoft Word is part of Microsoft Office and requires an up-front purchase or a Microsoft 365 subscription. If you’re using a computer without Word installed, there are other ways to view that DOCX...
  • 使用java语言,freemarker第三方jar包,根据不同的数据动态生成word文档

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,955
精华内容 4,782
关键字:

word文档转pages