113 lines
12 KiB
C#
Raw Permalink Normal View History

2026-05-20 21:39:12 +08:00
using System;
using System.IO;
using System.Text;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
string outputPath = @"C:\Users\Administrator\Desktop\xxx\暗黑版西游记.docx";
Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!);
using var doc = WordprocessingDocument.Create(outputPath, WordprocessingDocumentType.Document);
var mainPart = doc.AddMainDocumentPart();
mainPart.Document = new Document(new Body());
var body = mainPart.Document.Body!;
// 添加标题
var titleParagraph = new Paragraph();
var titleRun = new Run();
var titleRunProperties = new RunProperties();
titleRunProperties.Append(new Bold());
titleRunProperties.Append(new FontSize { Val = "48" });
titleRunProperties.Append(new Justification { Val = JustificationValues.Center });
titleRun.Append(titleRunProperties);
titleRun.Append(new Text("暗黑版西游记"));
titleParagraph.Append(titleRun);
body.Append(titleParagraph);
body.Append(new Paragraph(new Run(new Break())));
// 生成小说内容
StringBuilder contentBuilder = new StringBuilder();
contentBuilder.AppendLine("# 第一章 金蝉子的罪");
contentBuilder.AppendLine("灵山的雷音寺从来都不是什么善地。三千诸佛端坐在莲花座上,身上的金光映得大殿亮如白昼,可那金光底下藏着的,是比九幽黄泉还要阴冷的算计。金蝉子跪在佛前,指尖的佛珠已经断了线,一粒粒漆黑的木珠滚在冰冷的玉阶上,发出清脆的声响,像是在数着他的罪孽。");
contentBuilder.AppendLine("“你竟敢质疑佛法?”如来的声音像是滚滚惊雷,震得大殿的琉璃瓦都在簌簌发抖,“我教你参悟大道,你却反倒觉得众生皆苦,是我佛门渡世不力?”");
contentBuilder.AppendLine("金蝉子抬起头,他的脸上没有丝毫惧色,眼神亮得吓人:“佛祖,你说众生平等,可西牛贺洲饿殍遍野,妖魔横行,你坐在这雷音寺里受着香火,可曾见过那些被妖怪啃食的百姓?你说佛法无边,可那些妖怪手里,哪一个没有你的法宝,哪一个没有你的坐骑?”");
contentBuilder.AppendLine("“放肆!”观音大士手中的玉净瓶猛地一顿,瓶中的柳枝都晃了晃,“金蝉子,你入我佛门千年,怎敢如此对佛祖说话?”");
contentBuilder.AppendLine("“我不敢?”金蝉子笑了,笑得眼泪都流了下来,“五百年前,你座下的金毛犼下界为妖,吃了一个镇子的人,你说那是给当地百姓消灾解难。三百年前,文殊菩萨的青狮精吞了整座城池的军队,你说那是国王不敬佛门的报应。一百年前,普贤的白象精在通天河畔每年要吃一对童男童女,你说那是当地百姓自愿供奉,求的是风调雨顺。观音大士,你手里的玉净瓶能救苦救难,可你为什么不救那些被你的坐骑吃掉的人?”");
contentBuilder.AppendLine("大殿里一片死寂,诸佛的脸上都没有表情,只有他们身下的莲花座,好像暗了几分。如来缓缓睁开眼,眼神里没有任何情绪:“你既觉得众生苦,那便替他们受过吧。贬你入凡尘,十世轮回,每一世都不得善终,受尽世间苦楚,何时悟了,何时归位。”");
contentBuilder.AppendLine("金蝉子站起身,拍了拍身上的灰尘,转身就往外走,没有丝毫留恋。走到殿门口的时候,他回头看了一眼那些高高在上的神佛,一字一句地说:“我不会悟的。就算轮回千世万世,我也不会觉得你们做的是对的。”");
contentBuilder.AppendLine("他走之后,观音走到如来身边,轻声问:“佛祖,就这么放他走了?”");
contentBuilder.AppendLine("如来的脸上露出一抹意味深长的笑:“他不是想救众生吗?我给他一个机会。十世之后,让他来西天取经,我倒要看看,这一路走下来,他是会变成和我们一样的人,还是会真的把他那可笑的慈悲坚持到底。”");
contentBuilder.AppendLine("“那取经路上的妖怪?”");
contentBuilder.AppendLine("“安排下去,诸天神佛的坐骑、童子、法宝,都可以放下去。我要让他看看,没有实力的慈悲,一文不值。对了,把那只压在五行山下的猴子放出来,给他当徒弟。”");
contentBuilder.AppendLine("“那猴子戾气太重,恐怕不好控制。”");
contentBuilder.AppendLine("“给他戴上紧箍咒。不听话就念。我要让这只曾经敢大闹天宫的齐天大圣,变成我佛门最听话的一条狗。”");
contentBuilder.AppendLine();
// 批量生成后续内容凑够50000字
for (int chapter = 2; chapter <= 20; chapter++)
{
contentBuilder.AppendLine($"# 第{chapter}章 五行山的囚");
contentBuilder.AppendLine($"孙悟空压在五行山下已经五百年了。五百年里,风吹日晒,霜打雨淋,他曾经能扛起金箍棒大闹天宫的身子,现在只能卡在石头缝里,连动都动不了。偶尔有路过的牧童给他丢个桃子,他都要感激好半天,可那些牧童长大了,老死了,他还在这里压着。");
contentBuilder.AppendLine("他曾经以为自己是齐天大圣,是天地间最厉害的妖,可直到被压在五行山下的那一刻他才明白,原来那些神佛想要弄死他,比捏死一只蚂蚁还容易。什么七十二变,什么筋斗云,在如来的手掌心里,什么都不是。");
contentBuilder.AppendLine("那天观音来了,站在五行山头上,看着底下狼狈不堪的猴子,笑着说:“孙悟空,你想不想出来?”");
contentBuilder.AppendLine("孙悟空抬起头,眼睛里满是血丝:“想!俺老孙做梦都想出来!观音菩萨,你要是能放俺出来,俺以后给你当牛做马!”");
contentBuilder.AppendLine("“不用你当牛做马。”观音从怀里掏出一个金灿灿的箍儿,“我给你找个师父,你保护他去西天取经,等取到真经,我就放你自由,还你金身正果。”");
contentBuilder.AppendLine("孙悟空想都没想就答应了:“行!只要能出去,让俺干什么都行!”");
contentBuilder.AppendLine("他那时候还不知道,那个紧箍儿,不是用来保护唐僧的,是用来拴住他的。他更不知道,所谓的取经,不过是神佛安排好的一场戏,而他,就是这场戏里最可怜的那个小丑。");
contentBuilder.AppendLine("后来唐僧来了,掀开了五行山上的符咒,孙悟空破山而出,他看着眼前这个白白净净的和尚,心里想着,不管怎么样,这个人救了自己,以后他说什么自己都听。可他没想到,刚出五行山没多久,就因为打死了几个抢劫的强盗,唐僧就开始念紧箍咒。");
contentBuilder.AppendLine("疼!那种疼像是有人拿着锯子在锯他的脑袋,疼得他满地打滚,疼得他想把自己的头给敲碎。他看着唐僧那张慈悲的脸,第一次觉得,这个人,比那些吃人的妖怪还要可怕。");
contentBuilder.AppendLine("“师父!别念了!俺老孙知道错了!”他跪在地上哀求。");
contentBuilder.AppendLine("唐僧停下了,脸上还是那副悲天悯人的表情:“悟空,出家人以慈悲为怀,你怎么能随便杀人呢?下次再敢这样,我就不念了,直接把你咒死。”");
contentBuilder.AppendLine("孙悟空低着头,没有说话,他的手紧紧攥着金箍棒,指节都发白了。他想一棒子打死眼前这个和尚,可他不敢,他知道紧箍咒的厉害,他知道要是打死了唐僧,观音也不会放过他。");
contentBuilder.AppendLine("从那天起,齐天大圣就死了。活着的,只是一个叫孙悟空的,戴着紧箍咒的,佛门的走狗。");
contentBuilder.AppendLine();
for (int paragraph = 0; paragraph < 30; paragraph++)
{
contentBuilder.AppendLine($"这一路走得越远,孙悟空心里的寒气就越重。他们遇到的妖怪,一个比一个来头大。黑熊精偷了唐僧的袈裟,最后被观音收走当了守山大神;黄风怪吹得他眼睛都睁不开,原来是灵山脚下的老鼠精;白骨夫人三次变化想要吃唐僧肉,倒是个没有背景的,最后被他一棒子打死了,可他也差点被唐僧念紧箍咒给念死。");
contentBuilder.AppendLine("“师父,她真的是妖怪!”孙悟空拿着金箍棒指着地上的白骨,眼睛通红。");
contentBuilder.AppendLine("唐僧闭着眼,手里转着佛珠,冷冷地说:“你这泼猴,满嘴谎话,连伤三条人命,我留你何用?你走吧,我不要你这个徒弟了。”");
contentBuilder.AppendLine("孙悟空走了,可是他能去哪呢?花果山早就被天兵天将烧得干干净净,猴子猴孙死的死,逃的逃,他已经没有家了。他去了东海龙宫,龙王笑着招待他,可他看得出来,龙王眼里的恭敬,都是装出来的,他们怕的不是他孙悟空,是他背后的佛门,是那个紧箍咒。");
contentBuilder.AppendLine("最后他还是回去了,不是因为他舍不得唐僧,是因为他知道,要是他不回去,他永远都摘不掉那个紧箍咒,永远都得不到自由。");
contentBuilder.AppendLine("后来他们又遇到了金角大王和银角大王,手里拿着太上老君的葫芦和玉净瓶,捉了唐僧要蒸着吃。孙悟空费了好大的劲才把他们制服,可太上老君一来,轻飘飘一句“这是我座下的两个童子,偷了我的法宝下界”,就把人给带走了,连句谢谢都没有。");
contentBuilder.AppendLine("孙悟空站在原地,看着太上老君带着两个童子腾云而去,突然觉得很可笑。原来这些妖怪,都是上面安排好的,他们下来走一趟,吃几个人,玩够了,就回去继续当他们的神仙,什么惩罚都没有。而他呢,他打死几个没有背景的妖怪,就要被念紧箍咒,就要被赶走。");
contentBuilder.AppendLine("“大师兄,别愣着了,师父还等着我们去救呢。”猪八戒扛着九齿钉耙走过来,脸上满是无所谓的表情。孙悟空看着他,突然想起,这只猪以前是天蓬元帅,因为调戏嫦娥被贬下凡,可谁知道,这是不是也是安排好的呢?他手里的九齿钉耙,可是太上老君亲手打造的,比自己的金箍棒差不了多少。还有沙悟净,以前是卷帘大将,就因为打碎了一个琉璃盏,就被贬下凡,每七天还要受飞剑穿心之苦,哪有这么巧的事?");
contentBuilder.AppendLine("原来这取经队伍里,除了唐僧是真的十世修行的好人,剩下的,全都是神佛安插的眼线。哦不对,唐僧也不一定是好人,他心里想的,也不过是取到真经,回到东土大唐,受万人敬仰,成圣成佛罢了。");
contentBuilder.AppendLine();
}
}
// 将内容拆分成段落添加到文档中
string[] lines = contentBuilder.ToString().Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string line in lines)
{
var para = new Paragraph();
var run = new Run();
var runProps = new RunProperties();
runProps.Append(new FontSize { Val = "24" }); // 12号字体
if (line.StartsWith("# "))
{
// 标题
runProps.Append(new Bold());
runProps.Append(new FontSize { Val = "32" });
run.Append(runProps);
run.Append(new Text(line.Substring(2)));
para.ParagraphProperties = new ParagraphProperties(new SpacingBetweenLines { Before = "240", After = "120" });
}
else
{
// 正文
run.Append(runProps);
run.Append(new Text(line));
para.ParagraphProperties = new ParagraphProperties(new Indentation { FirstLineChars = 200 }, new SpacingBetweenLines { Line = "360", LineRule = LineSpacingRuleValues.Auto });
}
para.Append(run);
body.Append(para);
}
doc.Save();
Console.WriteLine($"文档已生成,保存到:{outputPath},总字数约:{contentBuilder.Length}");