2026-05-20 21:39:12 +08:00

113 lines
12 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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}");