将LibreOffice文档转换为豆瓣日记

豆瓣日记的编辑器一直以来都只支持纯文本的,因此无法将原先在LibreOffice中写的带有简单格式的文章导出。由于我在豆瓣主要写一些随笔性的内容,所以它们在LibreOffice中排版时也并未用到什么复杂的格式,充其量就是粗体、斜体、加亮等字符样式,以及章节标题、多级有序和无序列表的段落样式。接下来,我的想法就是先将LibreOffice中选中的文章导出成MediaWiki的markup格式,然后再写一个脚本程序对这个纯文本文件过滤处理一下,变成适合在豆瓣日记编辑器中粘贴的样式即可。该脚本程序最终用Perl来编写。对于字符样式,其直接将相应的样式标识符删除,例如在MediaWiki中:

  • 粗体用‘‘‘...‘‘‘标识;
  • 斜体用‘‘...‘‘标识;
  • 粗斜体用‘‘‘‘‘...‘‘‘‘‘标识。

对于多级有序列表,经Perl脚本转换后,采用不同的序号编号以及缩进进行区分,如:

  • 一级列表用阿拉伯数字:1.、2.、3. ...;
  • 二级列表用加右括号的小写字母:a)、b)、c)、...;
  • 三级列表用带圈的阿拉伯数字:①、②、③、...它们可以在特殊字符中找到;
  • 四级列表用小写罗马数字:i.、ii.、iii.、...。

对于多级无序列表,则采用特殊符号与缩进来区分。一至四级的编辑分别为:• ? ? ?。

对于章节标题,则保留MediaWiki的格式,分别用=、==、===等表示一、二、三级标题。

Perl脚本源码如下。其命令行第一个参数为由LibreOffice导出的MediaWiki文本文件名。转换后的文本直接输出到控制台。

#!/usr/bin/perl

use warnings;
use strict;

our @level_counters = (0, 0, 0, 0);

our @unordered_list_symbols = qw/ • ? ? ? /;
our @level0_symbols = qw/ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. /;
our @level1_symbols = qw/ a) b) c) d) e) f) g) h) i) j) /;
our @level2_symbols = qw/ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ /;
our @level3_symbols = qw/ i. ii. iii. iv. v. vi. vii. viii. ix. x. /;

# Symmetric typeface markers
our $bold_marker = "‘‘‘";
our $italic_marker = "‘‘";
our $bold_italic_marker = "‘‘‘‘‘";

sub ProcessListBr {
    my $current_list_level = $_[0];
    my $first_line_spacings = "   " x $current_list_level;
    s/<br\/>/\n$first_line_spacings/g;
}

sub ProcessLists {
    if (s/^\* +/$unordered_list_symbols[0] /) {
    ProcessListBr(1);
    return;
    }

    if (s/^\*\* +/    $unordered_list_symbols[1] /) {
    ProcessListBr(2);
    return;
    }

    if (s/^\*\*\* +/      $unordered_list_symbols[2] /) {
    ProcessListBr(3);
    return;
    }

    if (s/^\*\*\*\* +/        $unordered_list_symbols[3] /) {
    ProcessListBr(4);
    return;
    }

    my $clear_level_numbering_index = 0;

    if (s/^# +/$level0_symbols[$level_counters[0]] /) {
    $clear_level_numbering_index = 1;
    $level_counters[0]++;
    ProcessListBr(1);
    }

    if (s/^## +/   $level1_symbols[$level_counters[1]] /) {
    $clear_level_numbering_index = 2;
    $level_counters[1]++;
    ProcessListBr(2);
    }

    if (s/^### +/      $level2_symbols[$level_counters[2]] /) {
    $clear_level_numbering_index = 3;
    $level_counters[2]++;
    ProcessListBr(3);
    }

    if (s/^#### +/        $level3_symbols[$level_counters[3]] /) {
    $clear_level_numbering_index = 4;
    $level_counters[3]++;
    ProcessListBr(4);
    }

    if ($clear_level_numbering_index != 0) {
    for (my $i = $clear_level_numbering_index; $i <= $#level_counters; $i++) {
        $level_counters[$i] = 0;
    }

    return;
    }

    @level_counters = (0, 0, 0, 0);
}

sub ProcessURL {
    s/\[(http[^\s]+)\s+([^\s]+)\]/<a href=\"$1\">$2<\/a>/g;
}

sub RemoveFormat {
    s/$bold_italic_marker(.+?)$bold_italic_marker/$1/g;
    s/$bold_marker(.+?)$bold_marker/$1/g;
    s/$italic_marker(.+?)$italic_marker/$1/g;
    s/<u>(.+?)<\/u>/$1/g;
}

my $wiki_file = shift;

if (defined($wiki_file)) {
    open INPUT, "<$wiki_file" or die "Cannot open the file $wiki_file!\n";

    while(<INPUT>) {
    ProcessLists;
    ProcessURL;
    RemoveFormat;
    print;
    }

    close INPUT;
}
else {
    print "Please specify the input file!\n";
}
时间: 2024-12-18 22:06:56

将LibreOffice文档转换为豆瓣日记的相关文章

把office文档转换为html过程中的一些坑

之前和我们项目的团队一起酝酿了一个项目,公司的业务文档技术文档比较多,但都比较分散,虽然通过FTP或其他方式聚合起来了,但感觉还是不够方便. 另外公司每次都来新员工,新员工都需要一些培训,比较耗时,比较好的方法是把以前的配置录制视频然后线下先给新员工自己看,但时间久了,资料或视频总是找不到或不是最新等等. 于是我们团队想了一个项目,把已有的资料和视频从线下放到线上,就是能通过一个网站在线看office资料和视频.并且还能对资料评价和点赞等,根据点赞或想学等数据再决定是否对新员工或老员工来一次组织

Java 使用 jacob 将 word 文档转换为 pdf 文件

网上查询了许许多多的博客,说利用 poi.iText.Jsoup.jdoctopdf.使用 jodconverter 来调用 openOffice 的服务来转换等等,我尝试了很多种,但要么显示不完全,要么可是可能有问题,使用这个 jacob 的方法我最开始是最不想用的,因为它要导入 dll 文件,但最后我还是选择了使用该方法,原因是感觉转换后的 pdf 文件简直就是完美. jacob 缺点:需要 window 环境,而且速度是最慢的需要安装 msofficeWord 以及 SaveAsPDFan

C#实现office文档转换为PDF格式

需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFandXPS 下载地址 [url]http://www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en[/url] 这是一个微软官方出的office插件. office2010里好像能直接将文件另存为.PDF格式的 安装好之后,打开VS,以VS2005为例

Java 将Word文档转换为PDF

前言 本文将介绍如何使用免费Java Word组件Free Spire.Doc for Java在Java应用程序中将Word文档转换到PDF格式.Free Spire.Doc for Java在转换过程中能够识别中文字符并支持丰富的word文档元素:文本框.页眉.页脚.项目符号和编号.表格.文本.超链接.水印.图片.形状等. Free Spire.Doc for Java概述 Free Spire.Doc for Java 是由E-iceblue公司开发的一个免费的Java Word API,

JAVA将 Word 文档转换为 PDF

技术来源 下载spire.doc-2.2.0.jar地址 帮助文档 POM引入Jar(本人把jar放在项目的src/main/resources/lib目录下): <dependencies> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.doc</artifactId> <version>2.2.0</version> <scop

源码分享!!!world文档转换为JPG图片

http://bbs.csdn.net/topics/390055515 —————————————————————————————————————————————————— 基本思路是:先将world转换为pdf,,在将pdf转换为JPG ..然后清空缓存,,删除PDF文件!! WordToPDF1.java package test; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; impor

c#使用XSLT将xml文档转换为html文档

需要引用下面的命名空间: using System.Xml; using System.Xml.Xsl; 方法实现: public static string ConvertXML(XmlDocument InputXMLDocument, string XSLTFilePath , XsltArgumentList XSLTArgs) { System.IO.StringWriter sw = new System.IO.StringWriter(); XslCompiledTransform

swagger文档转换为WebApiClient声明式代码

1 swagger简介 Swagger是一个规范且完整的框架,提供描述.生产.消费和可视化RESTful Web Service.其核心是使用json来规范描述RESTful接口,另外有提供UI来查看接口说明,并有一套生成不同语言的客户端调用代码生成器. 1.1 对Api提供者 自顶向下 使用Swagger编辑器创建Swagger定义,然后使用Swagger代码生成工具生成服务器实现. 自底向上 为已有的REST API创建Swagger定义.一般的,Api提供者都会选择这种方式,比如在asp.

word文档(选择题)转换为excl表格

Word转excl表格 同事在做一个批量性的工作,就是将word文档中的题目和选项,转移到xml文档中.实例:转: 再网上有很多将各种文档转化的工具和例子,但是很少有将固定格式进行转化的. 因为在这之前也是不明所以,老大直接让写个脚本,本能的感觉这个脚本不是很好写,有危险.但是哪有害怕就不做的道理,不会也要干. 首先确定好转化思路 1.查了很多资料,转excl的都是用的json文件转字典再转excl或者将字典.元组.列表转为json再转excl.归根结底就是将字典转excl.比较欣喜的是正好可以